Hans-Georg Bork <[EMAIL PROTECTED]> wrote: > Und was passiert innerhalb awk wenn BEGIN/END dort nicht steht (s.o.)? > Das war meine Frage ...
awk ist in erster Linie ein Textparser. Eingabe von awk sind Records, per Default ist ein Record eine Zeile. Jeder Eingabe-Record wird gegen jeden Pattern im awk-Script verglichen und bei einem Match wird der zum Pattern gehoerende Code ausgefuehrt. Der Pattern im awk-Script '{ foo }' ist ein catch-all-Pattern, d.h. der matched auf jeden Record, i.e. auf jede Zeile. Du koenntest ersatzweise auch '/.*/ { foo }' oder '/^.*$/ { foo }' schreiben, da wird das Pattern besser sichtbar. Wenn Deine Eingabe leer ist (wie /dev/null oder 'echo -n ""'), gibt es keinen Text, keine Textzeile und insbesondere keinen Record. Deshalb wird bei einer leeren Eingabe auch kein zu irgendeinem Pattern gehoerender Code ausgefuehrt - es gibt schliesslich nichts zu matchen. Es gibt zwei spezielle Pattern BEGIN und END. Die Ausfuehrung des zu diesen Pattern gehoerenden Codes ist nicht an eine Eingabe gebunden, sondern an den Start bzw. das Ende von awk. Der Code dieser Pattern wird daher immer und unabhaengig von der Struktur der Eingabe ausgefuehrt. Unsinn war im uebrigen die Aussage, awk wuerde bei einer leeren Eingabe garnicht erst starten. Das erschliesst sich auch leicht durch einfaches Nachdenken und sogar ohne Wissen um die Existenz von BEGIN und END: um ueberhaupt festzustellen, dass eine Eingabe leer ist, muss Code ausgefuehrt werden. Damit Code ueberhaupt ausgefuehrt werden kann, der feststellt, dass die Eingabe leer ist, muss awk aber starten. regards Mario -- User sind wie ideale Gase - sie verteilen sich gleichmaessig ueber alle Platten -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)