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 durch Wie kann ich sed oder vorzugsweise awk verwenden, um dies nur für die zweite Spalte anzuwenden, sodass meine Ausgabe dies tun würde Sehen Sie so aus:

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 

Antwort

$ 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) und ersetzen Sie für jede Eingabezeile alle . im 2. Feld mit ,
  • 1 ist eine zu druckende awk-Sprache Forts $0 (das den Eingabedatensatz enthält)

Antwort

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

ersetzt das dritte Vorkommen des Punkts

Antwort

Fertig durch Die folgende Methode verwendet den Befehl awk

: 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 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.