Ein einzelnes Feld innerhalb einer CSV-Datei ersetzen

Datum: 2004-02-11
Quelle: suse-linux

Worum ging es?

In einer CSV-Datei soll das 5. Feld ersetzt werden, wenn es den Wert "error" hat.

Code
echo 'myKey1234;bdfgfgf;ahfdhads;usdufa;error;adjsflkjafadsf;error
myKey1235;bdfgfgf;ahfdhads;usdufa;success;adjsflkjafadsf;error' | \
  awk -F';' ' $5 == "error" { for (i=1; i<5; i++) printf "%s;", $i;
      printf "ABC;";
      for (i=6; i<=NF; i++) printf "%s;", $i;
      printf "\n";
      getline; }
      { print $0; } '
# Ausgabe / output:
myKey1234;bdfgfgf;ahfdhads;usdufa;ABC;adjsflkjafadsf;error
myKey1235;bdfgfgf;ahfdhads;usdufa;success;adjsflkjafadsf;error
Beschreibung

Ich habe die Datei zur Demonstration weggelassen und füttere den awk mit einer zweizeiligen Eingabe aus einem echo. Innerhalb des awk-Scripts wird zuerst der Fall bearbeitet, dass das 5. Feld den Wert "error" hat. In diesem Fall werden zuerst die Felder 1 bis 4 unverändert ausgegeben, dann der Austauschwert für Feld 5 und dann die noch folgenden Felder bis zum Zeilenende. Die letzte Zeile gibt die Eingabezeilen, für die die Bedingung nicht zutrifft, unverändert aus.