Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 13 awk-Programmierung
  gp 13.1 Einführung und Grundlagen von awk
    gp 13.1.1 History und Versionen von awk
    gp 13.1.2 Die Funktionsweise von awk
  gp 13.2 Aufruf von awk-Programmen
    gp 13.2.1 Grundlegender Aufbau eines awk-Kommandos
    gp 13.2.2 Die Kommandozeilen-Optionen von awk
    gp 13.2.3 awk aus der Kommandozeile aufrufen
    gp 13.2.4 awk in Shellscripts aufrufen
    gp 13.2.5 awk als eigenes Script ausführen
  gp 13.3 Grundlegende awk-Programme und -Elemente
    gp 13.3.1 Ausgabe von Zeilen und Zeilennummern
    gp 13.3.2 Felder
  gp 13.4 Muster (bzw. Adressen) von awk-Scripts
    gp 13.4.1 Zeichenkettenvergleiche
    gp 13.4.2 Vergleichsausdrücke
    gp 13.4.3 Reguläre Ausdrücke
    gp 13.4.4 Zusammengesetzte Ausdrücke
    gp 13.4.5 BEGIN und END
  gp 13.5 Die Komponenten von awk-Scripts
    gp 13.5.1 Variablen
    gp 13.5.2 Arrays
    gp 13.5.3 Operatoren
    gp 13.5.4 Kontrollstrukturen
  gp 13.6 Funktionen
    gp 13.6.1 Mathematische Funktionen
    gp 13.6.2 Funktionen für Zeichenketten
    gp 13.6.3 Funktionen für die Zeit
    gp 13.6.4 Systemfunktionen
    gp 13.6.5 Ausgabefunktionen
    gp 13.6.6 Eingabefunktion
    gp 13.6.7 Benutzerdefinierte Funktionen
  gp 13.7 Empfehlung

Kapitel 13 awk-Programmierung

Zwar haben Sie mit der Shell-Programmierung einen Trumpf in der Hand, mit dem Sie wohl fast alle Probleme lösen können. Trotzdem kommt man manchmal an einen Punkt, an dem sich die Lösung als nicht mehr so einfach und relativ umständlich erweist. Hier empfiehlt es sich häufig, auf andere Werkzeuge umzusteigen oder – sofern die Kenntnisse vorhanden sind – sich ein solches Werkzeug (bspw. in C) selbst zu programmieren. Allerdings hat man oft nicht die Zeit und Lust, gleich wieder etwas Neues zu erfinden. Wenn Sie also mit der Shell am Limit sind, ist ein Umstieg auf andere »Werkzeuge« wie awk oder auch Perl sinnvoll.


Rheinwerk Computing

13.1 Einführung und Grundlagen von awdowntop

Ich will es gar nicht leugnen, mit Perl hätten Sie die ultimativste Waffe für eigentlich (fast) alle Probleme, aber auch hier ist die Einarbeitungsphase und erforderliche Lernzeit relativ lange, wenn man von null anfangen muss (auch wenn bei Perl die Lernkurve recht steil ist). Mit awk hingegen haben Sie einen »kleineren«, aber schnell erlernbaren Interpreter. Ich fasse mich kurz, für eine Einführung in awk genügen 50 Seiten, für eine solche in Perl wäre dieser Umfang ein Witz.

Die Hauptaufgaben von awk glichen zu Beginn der Entwicklung denen von sed. awk wurde als ein Programm entwickelt, das als Reportgenerator dienen sollte. Allerdings hatte sich awk binnen kurzer Zeit zu einer echten Programmiersprache entwickelt. Die Syntax von awk gleicht der von C, ja man kann fast meinen, einen C-Interpreter vor sich zu haben. Allerdings hat awk gegenüber C den Vorteil, dass Sie sich nicht mit all den ungemütlichen Features von C befassen müssen.

Somit wurde awk im Anfangsstadium als Programm eingesetzt, mit dem Dateien zeilenweise eingelesen und in einzelne Felder (bzw. Wörter) zerlegt wurden. Daraus entstand dann eine benutzerdefinierte Ausgabe – im Prinzip also wie bei sed. Allerdings wurde awk in kurzer Zeit enorm erweitert. Heute bietet awk alle Konstrukte an, die von (fast) jeder modernen Programmiersprache verwendet werden: angefangen von einfachen Variablen, Arrays, den verschiedenen Kontrollstrukturen bis hin zu Funktionen (auch den benutzerdefinierten).


Rheinwerk Computing

13.1.1 History und Versionen von awk  downtop

Der Name awk stammt von den Anfangsbuchstaben der Entwickler (aus dem Jahre 1977) Aho, Weinberger und Kerninghan. Allerdings existieren mittlerweile drei Hauptzweige von awk-Versionen. Das Ur-awk (auch unter dem Namen oawk (für old awk) bekannt) von den eben besagten Entwicklern, das erweiterte nawk (new awk) von 1985 und die GNU-Version gawk (GNU awk), das wiederum eine Erweiterung von nawk darstellt. Linux, FreeBSD und NetBSD benutzen hierbei standardmäßig gawk und die meisten UNIX-Varianten (Solaris, HP-UX etc.) in der Regel nawk, wobei auch hier GNU-awk nachinstalliert werden kann. Das Ur-awk wird eigentlich nicht mehr genutzt und es gibt auch keinen Grund mehr, es zu verwenden, da hier die Unterschiede zu nawk und gawk erheblich sind. Dies fängt damit an, dass beim Ur-awk einige Schlüsselwörter (delete, do, function, return), vordefinierte Funktionen, spezielle Variablen und noch einiges mehr fehlen. Sofern Sie irgendwo einen Uralt-Rechner verwalten müssen, sei trotzdem in einer Liste aufgeführt, was das Ur-awk nicht kann oder kennt:

gp  Die Schlüsselwörter delete, do, function und return.
gp  Die vordefinierten Funktionen atan2, close, cos, gsub, match, rand, sin, srand, sub, system, tolower und toupper.
gp  Die speziellen Variablen ARGC, ARGV, FNR, FS, RSTART, RLENGTH und SUBSEP. Die spezielle Variable ENVIRON ist beim alten awk nicht vordefiniert.
gp  Operatoren für Ausdrücke ?, :, , und ^.
gp  Es sind nicht mehrere -f Schalter erlaubt.

Aber eigentlich müssen Sie sich keine Gedanken darüber machen, so lange Sie nawk bzw. gawk verwenden. Allerdings erscheint es mir sinnvoll, dass Sie hier für einen gleichen Kommandoaufruf sorgen. Meistens (unter Linux) ist dies allerdings von Haus aus der Fall. Ein Aufruf von awk führt unter Linux beispielsweise dank eines symbolischen Links zu gawk.

you@host > ls -l /usr/bin/awk
lrwxrwxrwx  1 root root 8 2005–02–05 /usr/bin/awk -> /bin/awk
you@host > ls -l /bin/awk
lrwxrwxrwx  1 root root 4 2005–02–05 /bin/awk -> gawk

Unter diversen UNIX-Varianten werden Sie nicht so komfortabel weitergeleitet. Allerdings können Sie auch hier selbst einen symbolischen Link setzen:

you@host > ln -s /bin/nawk /bin/awk

Damit führt jeder Aufruf von awk nach nawk. Wenn Sie hierbei auf mehreren Systemen arbeiten, müssen Sie sich zumindest keine Gedanken um den Aufruf von awk machen, weil Sie so immer awk eingeben und dadurch entsprechende awk-Variante nutzen.


Hinweis   Sie sollten aber bedenken, dass wenn Sie einen symbolischen Link auf ein anderes Programm (wie hier mit awk auf nawk) erstellen und wirklich einmal ein entsprechendes Paket nachinstallieren sollten, wäre die Folge, dass das Originalprogramm (hier bspw. nawk) überschrieben würde. Schlimmer noch, dass System registriert beide Pakete als installiert und wäre somit inkonsistent.

Hinweis   Im weiteren Verlauf des Buches werde ich immer awk nutzen bzw. den Aufruf oder die Syntaxbeschreibung awk verwenden. Dabei ist immer von nawk oder gawk die Rede (abhängig vom System), aber niemals vom alten Ur-awk (oawk)!



Rheinwerk Computing

13.1.2 Die Funktionsweise von awk  toptop

awk wartet auf Daten vom Eingabestrom, welche von der Standardeingabe oder von Dateien kommen können. Gewöhnlich werden hierbei die Dateien, die in der Kommandozeile angegeben wurden, eine nach der anderen geöffnet. Anschließend arbeitet awk Zeile für Zeile bis zum Dateiende ab oder – falls die Daten von der Standardeingabe kommen – bis (Strg)+(D) (EOF) gedrückt wurde. Bei der Abarbeitung werden die einzelnen Zeilen in einzelne Felder (bzw. Wörter) zerlegt. Als Trennzeichen gilt hier meistens auch dasjenige, was in der Variablen IFS (wobei diese Variable in awk FS lautet) steht, ein Leerzeichen oder/und ein Tabulatorzeichen.

Anschließend wird für gewöhnlich jede Zeile mit einem Muster bzw. regulären Ausdruck verglichen und bei gefundenen Übereinstimmungen eine bestimmte Aktion ausgeführt – eben ähnlich wie bei sed, nur dass die Aktionen hier wesentlich komplexer sein können/dürfen.


Hinweis   Natürlich führt awk auch eine Syntaxanalyse durch, ob die Kommandos sprachlich korrekt verwendet wurden, und gibt bei einem Fehler eine entsprechende Meldung aus.




Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern