Eingebaute Variablen
awk verfügt über einige eingebaute Variable. Die wichtigsten davon
sind:
- ARGC
- Anzahl der Befehlszeilenparameter
- ARGV
- Array der Befehlszeilenparameter. Die Indizes laufen von 0 bis
ARGC-1. Durch ändern von ARGV kann man vom Script aus weitere Dateien
öffnen.
- CONVFMT
- Das voreingestellte Format für Zahlen. Standardwert ist "%.6g".
- ENVIRON
- Stellt die Umgebungsvariablen als assoziatives Array zur Verfügung. Z.B.
liefert ENVIRON["HOME"] das Homeverzeichnis.
- ERRNO
- Text zum letzten aufgetretenen Fehler bei einer Dateioperation
- FIELDWIDTHS
- Wenn man diese Variable mit einer durch Leerzeichen getrennten Liste von
Zahlen füllt, so werden die Felder nicht durch die in FS angegebenen
Trennzeichen, sondern an den entsprechenden festen Positionen getrennt.
- FNR
- Die Nummer des aktuellen Eingabesatzes. Ein awk '{print FNR, $0}'
liefert ein Listing mit Zeilennummern.
- IGNORECASE
- Hat diese Variable einen von Null verschiedenen Wert, so werden alle
Stringvergleiche, das Trennen der Eingabe mit FS bzw. RS und
die Auswertung regulärer Ausdrücke unabhängig von Groß- bzw. Kleinschreibung
vorgenommen.
- NF
- Liefert die Anzahl Felder im aktuellen Eingabesatz.
- OFMT
- Das Standard-Ausgabeformat für Zahlen. Voreingestellt ist "%.6g"
- OFS
- Das Feldtrennzeichen für die Ausgabe. Voreingestellt ist ein Leerzeichen.
- ORS
- Das Satztrennzeichen für die Ausgabe. Voreingestellt ist LF.
Braucht man Zeilenenden im DOS-Format (CR+LF), kann man das (unter anderem)
mit dem awk erledigen: awk -v 'ORS=\r\n' '{print $0}'
Es existieren weitere spezielle Variable, auf die hier nicht weiter
eingegangen werden soll.
Typen
awk kennt keine echten Variablentypen, es wird nur mit Strings
hantiert. Diese werden allerdings als Zahlen aufgefaßt, wenn das im
Zusammenhang sinnvoll ist. Soll die Auswertung als Zahl erzwungen werden, so
addiert man eine 0.
Neben den einfachen Strings kennt awk noch assoziative Arrays. Die
Indizes eines solchen Arrays sind (im Gegensatz zu C) Strings. Man kann auch
mehrdimensionale Arrays verwenden.