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