Dies ist eine alte Version des Dokuments!
awk ist Zeilenorientiert - alle Anweisungen (außer Begin und End) auf die aktuell eingelesene Zeile angewendet. Anschließend wird die nächste Zeile eingelesen und das gleiche wiederholt.
Jede Zeile (Record) wird in Felder (Fields) zerlegt, auf die über Variablen $1 bis $x zugegriffen werden kann.
Die Zeichen anhand der das Ende eines Rekord (Zeile) erkannt wird kann frei definiert werden, gleiches gilt das Zeichen anhand dessen die einzelnen Fields (Felder) separiert werden - Default: New Line-Character bzw. Space.
Syntax:
BEGIN { Code; } /PATTERN/{ Code; } END{ Code; }
Es gibt mehrere Bedingungen bzw. Gestaltungsmöglichkeiten dieser.
Syntax:
/Regular Expression/{ some Code }
Beispiel:
/192.168.20.[0-9]/{ some Code }
Beispiel matcht wenn die IP mit 192.168.20 beginnt und auf 0-9 endet.
192.168.20.9“ heißt.
Sind komplexere Bedingungen bei denen gegen Feld-Variablen oder andere Variablen geprüft werden kann.
Mehrere Bedingungen können verknüpft werden.
Syntax:
Variable Vergleichsoperator Ausdruck{ Code } <code> \\ \\ ==== Variablen ==== Es gibt 3 Arten von Variablen. **Fields** * enthalten den Inhalt von Feldern * werden als $1-$x angesprochen (die Felder sind durchnummeriert) * die Benamung ist auch beim Ändern/setzen von Werten so * $0 enthält den gesamten Record/Zeile **Built-In** * Variablen deren Inhalt durch awk gesetzt werden * haben normale Namen (ohne irgend etwas davor) Einige Variablen: ^Name ^Beschreibung ^ |FS|Field Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Fields/Felder.| |RS|Record Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Records/Zeilen| * match-Funktionen ergeben auch true wenn nur ein Teilstring gematcht wird * Reguläre Ausdrücke müssen nicht so konstruiert werden das sie den gesamten String erfassen, sondern es reicht wenn sie auf einen zusammenhängenden Teilstring passen * FS -> Field-Seperator kann nur in BEGIN definiert werden * hat keinen Effekt wenn es später deklairert wird * Arrays werden ohne voran gestelltes $ angesprochen - sowohl bei Zuweisung, als auch bei lesendem Zugriff * { muss direkt nach dem Bereichs-Funktionskopf stehen -> darf nicht in der nächsten Zeile stehen ===== Grundaufbau ===== Syntax: <code> BEGIN { Code; } /PATTERN/{ Code; } END{ Code; }