mit sed nur 1 feld ersetzen (csv)
Hi! 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. Schön das man hier (qualifizierte) Beiträge zu seinen Fragen bekommt! Vorab schon mal vielen Dank! Christian -- Christian Augustata aka Sirius sirius@mynnga.de
"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.
folgender reguläre Ausdruck ersetzt das 3. Feld durch "ABC;" sed -e's/\(\([^;]*;\)\{2\}\)\([^;]*;\)\(.*\)$/\1ABC;\4/' ^-- 2 Felder------||-3.Feld-||-rest|
Schön das man hier (qualifizierte) Beiträge zu seinen Fragen bekommt!
immer gut beraten mit: "sed & awk kurz & gut", O'reilly Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
Am Mittwoch, 11. Februar 2004 11:34 schrieb Christian Augustat:
Hi!
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. Wenn es um die Ersetzung des ersten "error" geht, sollte es ein einfaches 'sed "s/error/<was auch immer>/"' ausreichen. Im Gegensatz zu 'sed "s/error/<was auch immer>/g"', wird nur das erste Vorkommen je Zeile angefasst.
Schön das man hier (qualifizierte) Beiträge zu seinen Fragen bekommt!
Soll hier schon mal vorgekommen sein ;-) -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
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
participants (4)
-
Christian Augustat
-
Dr. Jürgen Vollmer
-
Jan.Trippler@t-online.de
-
Manfred Tremmel