it-swarm.com.de

Awk - Ersetze nur ein Zeichen in einer bestimmten Spalte

Ich habe eine Datei wie diese:

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

Ich möchte alle Punkte . In der zweiten Spalte durch ein Komma , Ersetzen, wie ich es mit sed 's/\./\,/g' file Würde. Wie kann ich sed oder vorzugsweise awk, um dies nur für die zweite Spalte anzuwenden, sodass meine Ausgabe folgendermaßen aussehen würde:

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
12
nath
$ 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{} Dieser Codeblock wird ausgeführt, bevor eine Eingabezeile verarbeitet wird
  • FS=OFS=";" Setzt das Eingabe- und Ausgabefeldtrennzeichen auf ;
  • gsub(/\./, ",", $2) Ersetzen Sie für jede Eingabezeile alle . im 2. Feld durch ,
  • 1 Ist eine awk-Sprache zum Drucken von Inhalten von $0 (Die den Eingabedatensatz enthält)
20
Sundeep
sed 's/\./,/3' file

ersetzen Sie das dritte Vorkommen des Punktes

8

Erledigt mit der folgenden Methode mit awk

Befehl: awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename

ausgabe

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
4