Hallo Bernd, Bernd Brodesser <B.Brodesser@online-club.de> wrote:
$ echo "hallo du da huhu du auch" | awk 'BEGIN {OFS="#"} //' hallo du da huhu du auch
das "//" ist eigentlich ueberfluessig. Damit werden nur alle Zeilen ausgewaehlt und mangels expliziter Angabe die Default-Aktion (print) darauf angewendet -- aber das ist ohnehin Default ;-)
Wieso werden in der Ausgabe zwichen den einzelnen Felder kein # gesetzt? Ich habe doch ausdrücklich OFS="#" gesagt.
man awk sagt: $0 is the whole record. [...] print Prints the current record. [...] [...] print expr-list Prints expressions. Each expression is separated by the value of the OFS variable. [...] Die Default-Aktion ist print, was einem print $0 entspricht, aber das ist wohl soweit nichts Neues fuer Dich. Bei genauer Betrachtung handelt es sich also um ein print mit genau einer Expression dahinter, demnach ist es laut Doku korrekt, dass da nirgendwo ein OFS eingefuegt wird. (Es sind ja nicht mehrere Expressions zu trennen.) So einfach geht's also nicht. Aber ich bin da gerade auf einen interessanten Abschnitt in der Man-Page gestossen: [...] assigning to a non-exis tent field (e.g., $(NF+2) = 5) will increase the value of NF, create any intervening fields with the null string as their value, and cause the value of $0 to be recomputed, with the fields being separated by the value of OFS. [...] Decrementing NF causes the values of fields past the new value to be lost, and the value of $0 to be recomputed, with the fields being separated by the value of OFS. Das In- bzw. Dekrementieren von NF sollte also zum Neubau von $0 mit Einsetzen des gewuenschten OFS fuehren, so dass -- streng nach dem Dokumentierten -- ein '{$(NF+1) = 1; NF--; print}' den gewuenschten Erfolg hat. In der Praxis fuehrt anscheinend jede Zuweisung an NF zur Neubildung von $0, also klappt es mit folgendem Aufruf: ... | awk 'BEGIN {OFS="#"} {NF=NF; print}' Sieht krank aus, aber funktioniert. Auf was man in diesen Man-Pages so alles stoesst... Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org - eilert@linuxfreak.com http://www.informatik.uni-bremen.de/~eilert/ --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (1)
-
eilert@Informatik.Uni-Bremen.DE