Vorwort

AWK ist eine von Alfred V. Aho, Peter J. Weinberger und Brian W. Kernighan erdachte Programmier-Sprache, die besonders zur Verarbeitung von Textdateien (wie z.B. Logfiles) geeignet ist.

AWK ist besonders stark beim Scripting. Typisch ist "quick 'n dirty", oder als Hilfe zum Konfigurieren von Source-Code.

Implementationen

Auf GNU/Linux Systemen wird meist gawk (GNU awk) oder das schlankere mawk (Mike's awk) benutzt.

Anwendungen

Anleitung

Ein awk-Programm besteht aus drei Teilen:

  1. Ein Initialisierungsblock BEGIN { aktionen }
  2. Mehrere Verarbeitungsblöcke, bedingung x { aktionen x}
  3. Ein Abschlußblock (kann sein) END { aktionen }

Der Initialisierungsblock wird durchgeführt, bevor die erste Zeile eingelesen wird. Der Abschlußblock wird nach Bearbeitung aller Zeilen aller Dateien ausgeführt.

Verarbeitung:

awk liest eine Zeile, prüft die erste Bedingung, führt die Verarbeitung durch, prüft dann die zweite Bedingung, usw. Die Bedingung kann sein :

Durch besondere Variablen kann zugegriffen werden auf:

$0
Die gesamte Eingabezeile
$1
Das erste Feld
FS
Das Feldtrennzeichen kann gesetzt werden. FS=, FS=; , oder im Aufruf mit -F: Wenn nichts angegeben ist, dann ist da Leerzeichen und Tabulator.
ARGC
Anzahl der Argumente der Kommandozeile
ARGV[]
die Argumente der Kommandozeile
FILENAME
Name der aktuellen Eingabedatei (Im einem Aufruf könnten mehrere Dateien offen sein)
FNR
Zeilennummer
NF
Anzahl der Felder der Eingabe $NF ist das letzte Feld, $NF-1 das vorletzte
OFMT
(Output Format) Das Standard-Ausgabeformat : %.6g
OFS
(Output Field Separator) Ausgabefeldtrennung. Normalerweise ein Leerzeichen
ORS
(Output Record Separator) Ausgabezeilentrennung.
RS
(Input record separator)

Beispiel 1

Ersetzen einer Zeile in vielen Dateien

for i in *; do
  awk '/^DASS MUSS WEG$/ { print "das muss rein"; next }; { print }' $i > $i.tmp
  mv $i.tmp $i
done

Beispiel 2

Datei bsp:

oo ii
d.zz nozzle Buzz Olitz.xx.zz.cc.vv
g.zz zz.zz.zz.z.z.zzzu uu.xx uu.zz d.zz
dsd.zz

Datei cmd:

{ print $1 }
END { print "END CMD" }
BEGIN { print "AUS CMD" }

Folgende Befehlszeile wurde in bash eingegeben :

gawk -f cmd bsp >erg

Die erzeugte Ergebnisdatei erg:

AUS CMD
oo
d.zz
g.zz
dsd.zz
END CMD

Dies zeigt

Beispiel: Erzeugen von HTML-Tabellen mit awk

Datei bsp :

16.5.07;Schuhe;24.53
19.6.97;Computer, VAX;24 182.34
30.9.97;Enten, tiefgefroren; 14.95

Datei cmd :

BEGIN { FS=";"; printf "<table border>\n" }
{ printf("<tr>")
for ( n=1 ; n <= NF ; ++n )
        printf( "<td>%s</td>",$n)
printf("</tr>"); printf("\n")
}
END { printf "</table>\n" }

Folgende Befehlszeile wurde in bash eingegeben :

gawk -f cmd bsp >erg

Datei erg :

<table border>
<tr><td>16.5.07</td><td>Schuhe</td><td>24.53</td></tr>
<tr><td>19.6.97</td><td>Computer, VAX</td><td>24 182.34</td></tr>
<tr><td>30.9.97</td><td>Enten, tiefgefroren</td><td> 14.95</td></tr>
</table>

Dieses Beispiel demonstriert, wie mit awk eine Tabelle umformatiert werden kann. Der HTML-Browser zeigt dann :

16.5.07

Schuhe

24.53

19.6.97

Computer, VAX

24 182.34

30.9.97

Enten, tiefgefroren

14.95

Dies zeigt :


KategorieProgrammiersprachen KategorieAnleitung

AWK (zuletzt geändert am 2010-12-16 07:17:38 durch i5882C581)