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