Awk – ersätt endast ett tecken i en viss kolumn

Jag har en fil så här:

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 

Jag vill ersätta alla punkter . i den andra kolumnen med ett komma , som jag skulle göra med sed "s/\./\,/g" file hur kan jag använda sed eller helst awk för att bara tillämpa detta för den andra kolumnen, så min produktion skulle se ut så här:

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 

Svar

$ 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{} detta kodblock kommer att köras innan någon ingångsrad bearbetas
  • FS=OFS=";" ställa in in- och utmatningsfältavgränsare som ;
  • gsub(/\./, ",", $2) för varje ingångsrad, ersätt alla . i andra fältet med ,
  • 1 är ett konstigt idiom att skriva ut forts ent av $0 (som innehåller ingångsposten)

Svar

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

ersätt punktens tredje förekomst

Svar

Gjort med nedan metoden med hjälp av awk

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *