Awk - replace one character only in a certain column

$ awk 'BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1' ip.txt
2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
  • BEGIN{} this block of code will be executed before processing any input line
  • FS=OFS=";" set input and output field separator as ;
  • gsub(/\./, ",", $2) for each input line, replace all the . in 2nd field with ,
  • 1 is an awk idiom to print contents of $0 (which contains the input record)

sed 's/\./,/3' file

replace the third occurence of the dot


Done by below method using awk

Command: awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename

output

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7