Awk - Ersetzen Sie nur ein Zeichen in einer bestimmten Spalte


13

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 tun würde, wie sed 's/\./\,/g' fileich dies verwenden sedoder vorzugsweise awknur für die zweite Spalte anwenden kann, 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

Antworten:


22
$ 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=";" Setzen Sie das Eingabe- und Ausgabefeldtrennzeichen auf ;
  • gsub(/\./, ",", $2)Ersetzen Sie für jede Eingabezeile alle .Felder im 2. Feld durch,
  • 1ist eine awk-Redewendung zum Drucken von Inhalten $0(die den Eingabedatensatz enthält)

1
Super, viel THX!
nath

9
sed 's/\./,/3' file

Ersetzen Sie das dritte Vorkommen des Punktes


2
Eine andere Verwendung von cat... Warum nicht einfach sed 's/\./,/3' file? (Auch das Komma muss nicht
maskiert

Ich habe die Beobachtungen berücksichtigt
Emilio Galarraga

catwäre hier nicht unbedingt nutzlos. Es würde der Operation erlauben, 2 Kerne zu verwenden.
Ron Rothman

@ronrothman Was wäre der Zweck des laufenden Kerns cat, außer Ressourcen zu verbrauchen ? Vielleicht, um einen kleinen Puffer bereitzustellen, aber dann sollte diese Absicht besser durch ein Werkzeug wie bufferdurch ausgedrückt werden cat.
Roland Illig

Zum Entkoppeln der (blockierenden) Festplattenlesevorgänge vom String-Ersatz. Ja, ich nehme an, Sie können sich das als Pufferung vorstellen.
Ron Rothman

4

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.