Awk
awk ist eine Programmiersprache zur Bearbeitung und Auswertung einfacher Textdaten. Sie war eines der ersten Werkzeuge, die in der Version 3 von UNIX erschienen; sie wird auch heute noch vielfach zusammen mit sed in Shell-Skripten eingesetzt, um Daten zu bearbeiten, umzuformen oder auszuwerten. Die Bezeichnung "awk" ist aus den Anfangsbuchstaben der Nachnamen ihrer drei Autoren Alfred V. Aho, Peter J. Weinberger und Brian W. Kernighan zusammengesetzt.
Eine Version von awk ist heute in jedem Unix-System zu finden. Es ist aber auch für fast alle anderen Betriebssysteme verfügbar. Die Free Software Foundation stellt unter dem Namen "gawk" eine freie Version zur Verfügung.
awk arbeitet fast ausschließlich mit dem Datentyp Zeichenkette (engl. String). Daneben sind assoziative Arrays (d. h. mit Zeichenketten indizierte Arrays, auch Hashs genannt) und reguläre Ausdrücke grundlegende Bestandteile der Sprache.
Die Leistungsfähigkeit, Kompaktheit, aber auch die Beschränkungen der awk- und sed-Skripte regten Larry Wall zur Kreation der Sprache Perl an.
Aufbau eines Awk-Programms
Die typische Ausführung eines awk-Programmes besteht darin, eine Eingabe (oft in Form einer Datei) in eine Ausgabe (oft eine andere Datei) umzuwandeln.
Programme sind aus einer Anzahl Muster-Befehl-Paare aufgebaut.
/Muster 1/ { Befehl(e) } /Muster 2/ { Befehl(e) } ...
awk liest die Eingabe zeilenweise ein. Die Muster werden mit jeder Eingabezeile verglichen, und wenn eine Übereinstimmung vorliegt, werden die nachfolgenden Befehle ausgeführt. Die Muster werden nach den Regeln regulärer Ausdrücke interpretiert.
Spezielle Anweisungsformen sind:
- BEGIN { Befehl(e) }
- Führt die Befehl(e) aus, bevor Daten eingelesen werden.
- END { Befehl(e) }
- Führt die Befehl(e) aus, nachdem alle Daten bearbeitet wurden.
- /Muster/
- Wenn keine Befehle explizit gegeben sind, wird die eingegebene Zeile ausgedruckt, wenn sie dem gegebenen Muster entspricht.
- { action }
- Wenn kein Muster gegeben ist, werden die Befehle für jede Zeile ausgeführt.
Variablen
Es steht dem Benutzer frei, Programmvariablen zu definieren.
awk selbst stellt für jede Eingabezeile eine Reihe voreingestellter Variablen zur Verfügung: "$0" ist die ganze Zeile. Diese ist durch Trennfelder (z. B. Leerzeichen oder Kommata, die von Benutzer einzustellen sind) in einzelne Felder (engl. FIELDS) zerlegt, die als "$1", "$2", ... ansprechbar sind. Dieses automatische Einlesen und Auftrennen der Eingabe machen awk zu einem attraktiven Werkzeug.
Awk Befehle
Die Syntax der Befehlsanweisungen von awk ähnelt der der Programmiersprache C, was vielleicht dann nicht verwundert, wenn man bedenkt, das einer der Autoren, Brian W. Kernighan, auch einer der Väter der Programmiersprache C ist. Elementare Befehle sind Zuweisungen an Variable, Vergleiche zwischen Variablen, und Schleifen oder bedingte Befehlsausführungen (if-else). Daneben gibt es Aufrufe, sowohl zu fest implementierten als auch zu selbst programmierten Funktionen.
Die Datenausgabe ist durch den "print" Befehl gegeben. Um etwa das zweite Feld einer Eingabezeile auszudrucken, wird der Befehl
print $2
benutzt.
Literatur
- Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger: The AWK Programming Language. Addison-Wesley, 1988, ISBN 0-201-07981-X
Weblinks
- comp.lang.awk - Usenet Newsgroup
- http://www.gnu.org/software/gawk/gawk.html - GAWK (GNU Awk) Website
- http://www.bg.bib.de/portale/bes/Scripting/AWK/awk.pdf - AWK-Einführung auf Deutsch