Notice: Undefined index: string in /var/www/stefan/howtux.de/htdocs/article.php on line 49

Notice: Undefined index: settings in /var/www/stefan/howtux.de/htdocs/article.php on line 61
Home / awk / Grundlagen von awk

Grundlagen von awk

Kategorie: awkErstellt: 02.10.2007 - 23:58 
Autor: Stefan Abu Salah
0

Grundlagen von awk

awk ist eine Programmiersprache zur Auswertung und Bearbeitung größerer Textfiles. Hier bietet awk mächtige Hilfsmittel für das Auswerten, Konvertieren und extrahieren von Daten. Normalerweise arbeitet awk auf Strings, wobei hier im Zusammenschluss mit sed und regulären Ausdrücken schnell und einfach auch komplexere Aufgaben erledingt werden können. Insbesondere ist es mit awk im Unterschied zu Shellskripten möglich auch mit Fließkommazahlen zu rechnen.
Die Bezeichnung "awk" ist aus den Anfangsbuchstaben der Nachnamen ihrer drei Autoren Alfred V. Aho, Peter J. Weinberger und Brian W. Kernighan zusammengesetzt. awk ist heute fester Bestandteil jeder Linux Distribution, wobei oft die freie Version gawk der Free Software Foundation zum Einsatz kommt.
awk eignet sich nicht um größere Programmpakete zu realisieren, da hierfür wichtige Hilfsmittel wie beispielsweise Debugger fehlen und Fehlermeldungen recht unpräzise sind. Ausßerdem sind awk-Programme vergleichsweise langsam und es fehlen umfangreiche Konzepte der Datenabstraktion.

Aufbau von awk-Programmen
Die typische Ausführung eines awk-Programmes besteht darin, eine Eingabe (oft in Form einer Datei) in eine Ausgabe (oft eine andere Datei) umzuwandeln. Ein einfacher Aufruf eines awk-Programmes setzt sich aus mehreren Parametern zusammen:

Beispiel: Grundlegender Aufbau

awk [AUSDRUCK] [ANWEISUNGEN] [INPUTSTREAM]

Der erste Parameter ist ein regulärer Ausdruck und ist optional. Hiermit kann eine Filterung erzeugt werden.

Der zweite Parameter enthält die awk-Anweisungen, also das eigentliche Programm. Hier werden die gewünschten Manipulationen in awk-Code ausformuliert. Diese Anweisungen müssen in geschweiften Klammern eingefasst werden. Der Block ANWEISUNGEN ist auch optional.

Der dritte Parameter legt fest auf welchem Inputstream gearbeitet werden soll. Oft wird hier die Datei angegeben aus der gearbeitet werden soll. Auch dieser Parameter ist optional, wird er nicht angegeben, so ließt awk von der Standardeingabe oder aus einer Pipe.

Wie gesehen sind alle Parameter von awk optional. Dies ist jedoch nur mit folgenden Einschränkungen richtig:
Es muss entweder ein AUSDRUCK oder eine ANWEISUNG (oder beides) vorhanden sein und es muss immer ein INPUTSTREAM vorhanden sein, damit awk seinen Dienst tut.

Beispiel: awk als Ersatz für grep
stefan@troubadix/home/stefan$ awk '/Bad/' schausteller
Rosskopf Gertrud 55545 Bad Kreuznach 01701545500
Rosskopf Dieter 55545 Bad Kreuznach 01745648090
Rosskopf Goswin 55545 Bad Kreuznach 0178899450
Wagner Kurt-Walter 61231 Bad Nauheim 01745454587

Die grundlegenden Aufgaben von grep lassen sich mit awk auf einfache Weise nachbilden.

Bisher haben wir uns ausschließlich dem Filtern mit awk gewidmet. Nun wollen wir uns den Anweisungsblock von awk genauer anschauen. Wie bereits erwähnt findet hier der eigentliche Programmcode seinen Platz. Bevor wir uns jedoch die einzelnen Anweisungen die awk versteht widmen, wollen wir uns den grundlegenden Aufbau von awk-Anweisungsblöcken anschauen.

Anweisungen stehen immer innerhalb von geschweiften Klammern und werden entweder durch einen Zeilenumbruch oder ein Semikolon voneinander separiert.

Beispiel: Einfacher awk Anweisungsblock
{
ANWEISUNG_1
ANWEISUNG_2
ANWEISUNG_3; ANWEISUNG_4
ANWEISUNG_5;
}

awk arbeitet streng Zeilenweise. Das bedeutet, dass der Anweisungsblock für jede Zeile einer Eingabe genau einmal abgearbeitet wird. Das ist jedoch oft eine nicht hinnehmbare Einschränkung, da man so keine Möglchkeit hat vor und nach einer Abarbeitung noch andere Aktionen auszuführen. Dies ist jedoch häufig wichtg. Stellen Sie sich ein Programm vor, welches eine Summe über eine Spalte einer Datei berechnet. Am Ende der Bearbeitung soll genau einmal das Ergebnis ausgegeben werden. Dies würde mit nur einem Anweisungsblock, wie wir ihn bisher kennen nicht funktionieren.

Hierfür bietet awk eine Einteilung des Programms in einen Anfang (BEGIN), einen Hauptteil und einen Schluß (END). Vor dem Start des Hauptteils wird der BEGIN-Block ausgeführt. Nachdem alle Zeilen mit dem Hauptteil des Programms bearbeitet wurden wird der END-Block ausgeführt.

Beispiel: Aufbau eines awk Programms
Optional: INTERPRETER

BEGIN {
ANWEISUNG_1
ANWEISUNG_2
}

{
ANWEISUNG_3
ANWEISUNG_4
}

END {
ANWEISUNG_5
}

Das oben beschriebene Problem lässt sich nun wie folgt realisieren:

Beispiel: Unser Problem in Pseudosyntax
BEGIN {
summe=0;
}

{
summe=summe+aktueller_wert;
}

END {
ausgabe summe;
}

Kommentare in awk
Auch unter awk gibt es die Möglichkeit Kommentare in den Programmcode zu platzieren, wovon gute Programmierer regen Gebrauch machen. Kommentare werden, analog zu denen in Shellskripten, mit der Raute (#) eingeletet.

Beispiel: Kommentare in awk
...
{
# Hier wird die Summe berechnet
summe=summe+aktueller_wert;
}
...

Optionen: awk (Auszug)

-F Setze einen Feldseperator (vgl. cut)
-f Angabe einer, oder mehrerer awk-Programmdateien
-v var=WERT Übergibt WERT an Variable var



Notice: Undefined variable: urli in /var/www/stefan/howtux.de/htdocs/classes.php on line 240
Bookmark auf del.icio.usBookmark auf Mister WongBookmark auf BlinklistBookmark auf GoogleBookmark auf LinkarenaBookmark auf YiggBookmark auf FolkdBookmark auf Yahoo
Home / awk / Grundlagen von awk
simplum