Awk – vervang slechts één teken in een bepaalde kolom

Ik heb een bestand als dit:

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 

Ik wil alle punten . in de tweede kolom vervangen door een komma , zoals ik zou doen met sed "s/\./\,/g" file hoe kan ik sed of bij voorkeur awk gebruiken om dit alleen toe te passen voor de tweede kolom, zodat mijn uitvoer zien er als volgt uit:

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 

Antwoord

$ 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{} dit codeblok zal worden uitgevoerd voordat een invoerregel wordt verwerkt
  • FS=OFS=";" stel het veldscheidingsteken voor invoer en uitvoer in als ;
  • gsub(/\./, ",", $2) voor elke invoerregel, vervang alle . in 2e veld met ,
  • 1 is een vreemd idioom om af te drukken vervolg ents van $0 (die het invoerrecord bevat)

Answer

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

vervang de derde keer dat de punt voorkomt

Antwoord

Klaar door onderstaande methode met awk

Commando: 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 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *