Hallo zusammen,
eine Frage zum Scripting:
versuche momentan -leider vergebens - Komma-getrennte Textdateien zu bearbeiten ?!? Vielleicht kann mir hier jemand helfen.
1.)
ich würde gerne aus einem Zelleneintrag "Motor ..." --> "Motor...." machen oder wahlweise die drei Punkte löschen. Habe es mit sed, awk, tr versucht, schaffe es aber nicht - bei mir kommt da immer nur murcks raus.
So was wie cat datei | tr -d '\.\.\.' löscht leider auch alle einzelnen Punkte - es handelt sich um ein englische Dateien, die auch Dezimalzahlen enthält - irgendwie blöd....
Du musst die Punkte escapen, da die sonst in einer regexp als Platzhalter betrachtet werden. Also so etwas wie
sed -e 's/Motor\ \.\.\./Motor..../'
2.)
eine andere Zelle möchte ich von "/0" in "/,0" ändern....das gleiche wie oben - nur mumpitz - bei mir.
Auch da mußt du den Slash escapen:
sed -e 's/\/0/\/,0/'
Hat wohl irgendwas mit Sonderzeichen zu tun, denke ich. Die bekomme ich aber nicht \... maskiert ?!? zu 1.) müsste tr doch eingentlich gehen, da gleiche Anzahl an Zeichen ?!? bei 2.) bin ich ratlos.
Nein, tr ersetzt ein einzelnes Zeichen durch ein anderes Zeichen. Mit sed kannst du eine Zeichenkette durch eine andere ersetzen, mit (n)awk kannst du die Datei feldweise bearbeiten, z.B. wenn in anderen Spalten die Daten nicht angerührt werden sollen. Da fällt dann auch ein Teil der Escapes weg:
# cat test.txt
1,2,Motor ...,4,5
1,2,Motor... ,4,5
1,2,Motor....,4,5
1,/0,3,4,5
1,2,/0,4,5
1,asdf/0asdf,3,4,5
# cat test.awk
BEGIN { FS="," ; OFS="," }
$3 == "Motor ..." { $3="Motor...." }
$2 == "/0" { $2="/,0" }
{ print }
# awk -f test.awk test.txt
1,2,Motor....,4,5
1,2,Motor... ,4,5
1,2,Motor....,4,5
1,/,0,3,4,5
1,2,/0,4,5
1,asdf/0asdf,3,4,5
#
Das ist zwar jetzt auf die Schnelle unter Linux getestet, mit nawk unter Solaris sollte das aber genauso gehen.
Der Ansatz von claus mit Perl ist ähnlich (Perl ist ja von den Ursprüngen her ein aufgebohrtes Awk), obwohl man das mit -n noch kürzer hinbekommen könnte. ;-)
Alle Klarheiten beseitigt? :-)
Danke schomma
Bitte. Ist eine nette Abwechslung. :-)