awk ein Textfilter zum Programmieren
Das Programm awk kann sehr unterschiedlich eingesetzt werden. Es wirkt im wesentlichen wie
ein Filter von Textdokumenten und kann gleichzeitig beim Lesen jeder Zeile beliebig viele Pro-
grammschritte durchführen. Je nachdem welchen Inhalt die Zeile hat, welche Zeilennummer
oder welche Datei gerade eingelesen wird. All diese Informationen kann mit awk sehr einfach
abgefragt werden und dann die jeweilige Aktion bestimmt werden.
So lassen sich u. a. Zeilen bearbeiten, entfernen, hinzufügen, vertauschen usw. oder nur ein-
zelne Felder einer Zeile. Die Möglichkeiten sind sehr umfangreich.
Im Zusammenhang dieser Anleitung werden nur einfache Erklärungen zu awk gegeben. Wer
sich tiefer mit diesem Programm befassen möchte sei die weiterführende Literatur empfoh-
len.
Ein Programmtext mit dem Dateinamen „programm“ und einer zu bearbeitenden Datei mit
dem Namen „Eingabe“ wird mit awk wie folgt aufgerufen:
$> awk -f programm Eingabe
Es gibt auch eine Verarbeitung, in welcher der Programmtext in Hochkommas direkt hinter
dem Aufruf „awk“ übergeben wird. Diese Form des Aufrufs eignet sich eher für sehr kurze
Anweisungen – sogenannte Einzeiler. Bei dem in dieser Anleitung beschriebenen Vorgehen,
sind solche Einzeiler weniger zu gebrauchen.
Werden die Ausgaben nicht bereits im Programm auf Dateien umgelenkt, so erfolgt die Ausgabe
direkt in der Shell (stdout) und könnte wie folgt in eine Datei mit dem Namen „Ausgabe“
ausgegeben werden:
$> awk -f programm Eingabe > Ausgabe
Existiert die Datei „Ausgabe“ schon, so wird diese überschrieben. Erfolgt die Umlenkung mit
>> statt mit > so werden die Ausgaben an eine bestehende Datei angehängt. Besteht die Datei
nicht, so wird diese erstellt.
Mit dieser Ausgabenumlenkung kann nur eine Datei je Programmdurchlauf geschrieben wer-
den. Deswegen ist die Umlenkung direkt im Programmtext zu bevorzugen. Alles was dann noch
übrig bleibt, wie Fehlermeldungen usw. könnten dann außerhalb des Programmtextes umge-
lenkt und so ebenfalls für die weitere Bearbeitung oder Rückmeldung zur Kontrolle beibehalten
werden.
Beim Aufruf von awk können auch Variablen inkl. Werte übergeben werden. Eine im Pro-
grammtext von Anfang nutzbare Variable „verzeichnis “ wird wie folgt übergeben:
$> awk -v verzeichnis="c:\Daten\texte" -f programm Eingabe
Damit kann man das Programm dynamisch steuern.
Die Programmiersprache in awk lehnt sich nah an den Syntax von C an; hat aber sehr viele
Vereinfachungen und kann Textstrings direkt zuweisen oder bearbeiten. Kommentare werden
wie in Shellskripten mit dem Hash-Zeichen # eingeleitet.
Das Programm awk ist zudem für die Bearbeitung von Texten gedacht und hat neben Muste-
rerkennungen einen dreiteiligen Aufbau, der nicht zwingend notwendig ist. So wird die Sektion
die mit dem Wort „BEGIN“ eingeleitet wird als erstes abgearbeitet, noch bevor eine Zeile einer
Eingabedatei gelesen wird. Erst danach werden alle anderen Sektionen ausgeführt. Die Sek-
tion mit dem Wort „END“ wird erst nach dem Einlesen der letzten Zeile der letzten Datei und
der Ausführung aller davor liegender Sektionen ausgeführt. So kann mit dieser Struktur eine
Vorverarbeitung und eine Nachverarbeitung durchgeführt werden. Alle Sektionen werden mit
geschwungenen Klammern zu Blöcken zusammengefasst.
Ein einfaches „Hello World“-Programm sieht folglich so aus und braucht beim Aufruf auch
keine Eingabedatei:
1 # gibt nur "Hello World" aus
2 BEGIN{ print "Hello World";}
Alle Programmzeilen sollten mit einem Semikolon ; enden. Man kann Zeilenumbrüche beim
Schreiben dann weglassen. Jedoch leidet die Lesbarkeit darunter. Richtig formatiert sollte es
so ausschauen:
1 # gibt nur "Hello World" aus
3 BEGIN{
4 print "Hello World";
5 }
Liegt eine Eingabedatei vor die nachfolgende Zeilen enthält:
K;Brause,Fritz;11.11.1970;Programmierer;
D;Kuchen;gerne;
D;Brause;sehr gerne;
S;2;lustig;
K;Sonnenschein,Susi;01.04.1980;Floristin;
D;Blumen;sehr gerne;
D;Körbe;gerne;
D;Sonne;sehr gerne;
S;3;herzlich;
K;Mustermann,Max;31.12.1990;Politiker;
D;Plakate;gerne;
S;1;langweilig;
So kann man diese mit awk wie folgt einlesen und bearbeiten, wenn man sich zunächst mit
dem Aufbau und dem Inhalt der Daten befaßt:
• Feldtrennzeichen ist das Semikolon
• Das 1. Feld bestimmt den Datensatztyp
• Je Datensatztyp sind unterschiedliche Felder auch in der Anzahl vorhanden