Zur Abwechslung wollte ich mal einen Linktipp posten. Ich finde, dass die Programmiersprache (nagut je nach Definition eher Skriptsprache) AWK zu unrecht bei den meisten Entwicklern (die zumindest ich kenne) recht unbekannt ist. Jeder kennt Perl, Python, Ruby aber bei AWK (bzw. GAWK, der GNU Variante von AWK mit den meisten Features) gibt es oft Fragezeichen.
Einigen anderen Leuten ist AWK sehr wohl bekannt, allerdings nur in Form von sog. Einzeilern wie z.B.
pb@titania:~$ echo foo bar | awk '{ print $2 }'
bar
pb@titania:~$
Die wissen aber meist nicht, das AWK eine relativ mächtige Sprache (wenn auch nicht so mächtig wie Perl und Konsorten) ist und man in AWK ohne Weiteres leserliche Skripte mit mehreren hundert Zeilen Code schreiben kann. (z.B. habe ich früher mal eine Web-Template Engine in GAWK programmiert).
Wieso sollte man AWK einsetzen wollen, da es doch mächtigere Skriptsprachen wie z.B. Perl gibt? AWK glänzt mit seiner Einfachheit und Kompaktheit. Ausserdem ist AWK sehr gut für die textuelle Verarbeitung von grossen Datenmengen (z.B. Loggfiles) geeignet, da wie bei SED (Streaming Editor) auch bei AWK by default ein "Stream" an Daten verarbeitet wird. Bei sehr viel Daten und großen Regexp ist die Regexp Engine von AWK die von vielen bekannten Programmier- und Skriptsprachen performancemäßig haushoch überlegen. Neben der Shell ist AWK so fast die einzige Skriptsprache, die man Standardmäßig auf jedem Linux oder UNIX oder UNIX-artigem Betriebssystem im Basissystem schon mit drin hat. Man kann also direkt loslegen ohne AWK erst installieren lassen zu müssen. Im Vergleich zu den großen Skriptsprachen ist AWK überschaulicher und es ist einfacher sich zu involvieren. In GAWK besteht zudem auch die Möglichkeit eigene Erweiterungen in C zu programmieren; sollte die Sprache wirklich mal ein wichtiges Feature nicht unterstützen. Oder man nimmt ein externes Programm zur Hilfe, welches aus AWK heraus aufgerufen- oder per Shell-Pipe ankoppelt wird. Ein weiterer Einsatzgebiet von AWK sind die bereits erwähnten 1-liner, die man ohne große Schmerzen direkt in der Shell programmiert. Kombiniert mit den Editiermöglichkeiten der Shell ist AWK auch hier ein mächtiges Werkzeug.
Ich kenne Web-Services die über eine Milliarde HTTP-Requests pro Tag (im Peak 25 tausend pro Sekunde) verarbeiten, und dies mit GAWK. Bei AWK gibt es, wie bereits angedeutet, mehrere Implementierungen (z.B. das Ur-AWK, NAWK, MAWK, GAWK, ...) wobei GAWK die vielfältigste ist (Buchtipp: Effective AWK Programming). Mit awk.info gibt's eine zentrale Community rund um alle AWK-Implementierungen (z.B. auch objektorientiertes AWK oder AWK mit SQL Anbindung) inklusive Blog und eine menge Beispielen.
