Awk – înlocuiți un caracter numai într-o anumită coloană

Am un fișier de genul acesta:

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 

Vreau să înlocuiesc toate punctele . din a doua coloană cu o virgulă , așa cum aș face cu sed "s/\./\,/g" file cum pot folosi sed sau de preferință awk pentru a aplica acest lucru doar pentru a doua coloană, astfel încât rezultatul meu ar arata astfel:

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 

Răspuns

$ 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{} acest bloc de cod va fi executat înainte de procesarea oricărei linii de intrare
  • FS=OFS=";" setați separatorul de câmp de intrare și ieșire ca ;
  • gsub(/\./, ",", $2) pentru fiecare linie de intrare, înlocuiți toate . în al doilea câmp cu ,
  • 1 este un idiom extraordinar de imprimat cont ents $0 (care conține înregistrarea de intrare)

Răspuns

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

înlocuiți a treia apariție a punctului

Răspuns

Efectuat de mai jos metoda folosind awk

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

ieșire

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 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *