Awk – nahradit jeden znak pouze v určitém sloupci

Mám takový soubor:

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 

Chci nahradit všechny tečky . ve druhém sloupci čárkou , stejně jako sed "s/\./\,/g" file jak mohu použít sed nebo nejlépe awk použít to pouze pro druhý sloupec, takže můj výstup by vypadat takto:

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 

odpověď

$ 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{} tento blok kódu bude proveden před zpracováním jakéhokoli vstupního řádku
  • FS=OFS=";" nastavit oddělovač vstupního a výstupního pole jako ;
  • gsub(/\./, ",", $2) pro každý vstupní řádek, nahradit všechny . ve 2. poli s ,
  • 1 je falešný idiom k tisku pokr ents $0 (který obsahuje vstupní záznam)

Odpověď

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

nahradit třetí výskyt tečky

odpověď

Hotovo níže uvedená metoda používající awk

Příkaz: awk -F ";" "{gsub(/\./,",",$2);print $1";"$2";"$3}" filename

výstup

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 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *