awk – Bearbeiten und Durschuchen von Textdateien

awk ist ein interpretierende Programmiersprache, die fuer das Bearbeiten und Durchsuchen von Textdaten vorgesehen wurde.

Der Name awk steht dabei fuer die Anfangsbuchstaben der Nachnamen der Erfinder dieser Sprache – Alfred Aho, Peter Weinberger und Brian Kernighan Das urspruengliche awk auch als old-awk bezeichnet wurde 1977 veroeffentlicht, das erweiterte nawk (new awk) 1985 und die GNU Version gawk (GNU awk) 1988. Mit den heutigen Linux Distributionen wird ueblicherweise GNU awk ausgeliefert. Die in busybox enthaltene awk Version ist vermutlich eine abgespeckte Version von GNU awk.
Ein Beispiel:


awk -F: ‚{print $5, $6}‘ /etc/passwd

Das Beispiel gibt den Namen der Benutzer und das jeweilige Home-Verzeichnis aus:
Dabei gibt die Option

-F:

an, das der Doppelpunkt als Trennzeichen zwischen Feldern aufgefasst werden soll. Das eigentliche awk-Programm besteht aus


{print $1, $6}

Damit die Shell das eigentliche awk-Programm nicht anruehrt muss es durch die einfachen Hochkommata geschuetzt werden. Die geschweiften Klammern gehoeren zum Programm.
Zweites Beispiel:
Hier wird das erste Feld der Passwortdatei ausgegeben, dabei werden die Zeilen zusaetzlich Nummeriert.


awk -F : ‚{print NR,$1}‘ /etc/passwd

Der folgende Befehl macht das gleiche wie der vorhergehende. Der Feldtrenner wird hierbei aber als Anweisung in einem awk Programm gesetzt.

awk ‚BEGIN {FS = „:“} {print NR,$1}‘ /etc/passwd

Mein Lieblingsbeispiel fuer awk ist dieses:


ping -c 3 127.0.0.1 | grep ‚received‘ | awk -F‘,‘ ‚{ print $2 }‘ | awk ‚{ print $1 }‘

Hierbei wird die Ausgabe des Ping Befehls mittels grep und awk soweit zerlegt das die Anzahl der empfangenen Packete uebrigbleibt.
Quelle:
Kreative Anwendung von awk auf debian-blog.org