Am Mittwoch, 11. Februar 2004 12:22 schrieb Manfred Tremmel:
Am Mittwoch, 11. Februar 2004 11:34 schrieb Christian Augustat:
Ich versuche innerhalb einer CSV Datei ein einzelnes Feld zu ersetzen. Nun meine Frage... kann ich das per SED direkt ansteuern, oder muss ich die komplette Zeile (umständlich) auseinander parsen, um damit die anderen Felder wieder herzustellen?
Beispielzeile: myKey1234;bdfgfgf;ahfdhasdfads;uafusdufa;error;adjsflkjasdfadsf ;error ;[...]
Ich möchte hier z.b. das Feld 5 ( error ) ersetzen mit einem anderen Wert.
Willst Du exakt Feld 5 ersetzen, oder aber einfach nur das erste Auftreten von "error" ersetzen. Ersteres wird mit sed kaum möglich, da wäre eine Zerlegung mit awk und Trennzeichen ";" die bessere Möglichkeit.
Genau (ungetestet): 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";} ' datei ersetzt Feld 5 durch "ABC", wenn es den Inhalt "error" hat. Wenn man es sicherer machen will, dann baut man noch Prüfungen ein, was z. B. die Anzahl der Felder angeht. Jan