8.9 Tabellen im awk
Alle Tabellen im awk sind assoziativ. D.h. Sie werden über Strings als Index
angesprochen. Der Index wird in einer eckigen Klammerung [index] angegeben.
Natürlich können numerische Werte als Index verwendet werden, sie werden aber
intern als Strings behandelt.
Mehrdimensionale Tabellen können verwendet werden, sie werden vom awk jedoch intern eindimensional abgebildet.
Die Indizes müssen beim Ansprechen durch Komma getrennt werden array[i,j,k]
awk verwendet den Inhalt der Variable SUBSEP als Separator um einen eindeutigen Index zu erzeugen.
SUBSEP Trennzeichen zwischen mehreren Indizes einer Tabelle (Default
"\034").Da intern nur eindimensional gearbeitet wird, wird auf diese
Weise ein eindeutiger Index erzeugt.
Der Index wird innerhalb von [ ] angegeben.
i = "A" ; j = "B" ; k = "C"
x[i, j, k] = "hello, world\n"
Intern erfolgt der Zugiff über den String "A\034B\034C".
8.9.1 in array Konstrukt
Der Special-Operator 'in' kann in einem if verwendet werden, um zu testen ob der Tabellenplatz
mit dem angegebenen Index existiert.
if (val in array)
print array[val]
In einem for oder while wird dagegen die Tabelle abgearbeitet und es wird jeder
vorhandene Index auf denTabellenplatz zur Verfügung gestellt.
8.9.2 for (var in array) statement
END { for (user in bytes)
{ anz+=1
printf " %-8s %8d %8d %10d \n", user, bytes[user]
}
}
8.9.3 delete Löschen von Tabellenelementen und Tabellen
Ein einzelnes Tabellenelement kann mit delete array[index] gelöscht werden.
Durch delete array wird der Inhalt der gesamten Tabelle gelöscht.
8.9.4 Parameterü;bernahme ARGC, ARGV
Die Argumente der Kommandozeile sind innerhalb des awk verfügbar. Die Tabelle
ARGV[0] bis ARGV[ARGC-1] enthalten die übergebenen Parameter.
Achtung: Die optionalen Parameter ( z.B. -v var=val -FS: ) sind nicht in der
Tabelle enthalten.
ARGV[0] ist der Name des Programms (i.d.R. awk
ARGV[1] ist der erste Dateiname der hinter dem Script angegeben wird.
Im nachfolgenden Beispiel substituiert die Shell * durch die
Dateinamen.
awk '
BEGIN { for (i=0; i < ARGC; i++)
print "%d. %s\n",i, ARGV[i]
} '
' *
|______ Das Metazeichen wird von der Shell aufgelöst. Die Dateinamen
werden an den awk übergeben.