5.0 Die integrierten Variablen von AWK meistern
5.1. Die Rolle eingebauter Variablen
Die integrierten Variablen sind ein zentrales Merkmal von AWK und ermöglichen den automatischen Zugriff auf Informationen über die Eingabedaten, die Ausführungsumgebung und den Programmzustand. Deren Beherrschung ist unerlässlich für das Schreiben leistungsstarker, prägnanter und idiomatisch korrekter AWK-Skripte.
5.2. Standard-AWK-Variablen
- ARGC & ARGV ARGC enthält die Anzahl der Kommandozeilenargumente, während ARGV ein Array ist, das die Argumente selbst enthält. Beachten Sie, dass ARGV[0] den Namen des Befehls, awk, enthält.
- NF (Anzahl der Felder) Diese Variable speichert die Gesamtzahl der Felder im aktuellen Datensatz. Sie wird für jeden gelesenen Datensatz neu berechnet.
- NR (Nummer des Datensatzes) Diese Variable dient als globaler Zähler und speichert die kumulierte Anzahl der seit Beginn des Skripts verarbeiteten Datensätze.
- FNR (Aktenzeichen) Ähnlich wie NR speichert auch FNR die Datensatznummer, diese wird jedoch für jede neu verarbeitete Eingabedatei auf 1 zurückgesetzt. Dies macht FNR besonders wertvoll für Operationen mit mehreren Dateien. Betrachten wir beispielsweise zwei Dateien: data1.txt mit dem Inhalt A\nB und data2.txt mit dem Inhalt C\nD.
- Beachten Sie, dass FNR für data2.txt auf 1 zurückgesetzt wird, während NR weiterhin inkrementiert wird.
- FS (Feldtrennzeichen) Definiert das Zeichen oder den regulären Ausdruck, der zur Trennung der Felder im Eingabedatensatz verwendet wird. Standardmäßig wird ein Leerzeichen (ein oder mehrere Leerzeichen oder Tabulatoren) verwendet.
- RS (Datensatztrennzeichen) Definiert das Zeichen, das zum Trennen von Datensätzen in der Eingabe verwendet wird. Standardmäßig wird ein Zeilenumbruchzeichen (\n) verwendet.
- OFS (Ausgabefeldtrennzeichen) Legt das Trennzeichen zwischen den Feldern in der Ausgabe fest, wenn die print-Anweisung mit mehreren Argumenten verwendet wird. Standardmäßig wird ein einzelnes Leerzeichen verwendet.
- ORS (Ausgabedatensatztrennzeichen) Definiert das Trennzeichen, das am Ende jedes Datensatzes in der Ausgabe eingefügt wird. Standardmäßig wird ein Zeilenumbruchzeichen (\n) verwendet.
- DATEINAME Diese Variable enthält den Namen der aktuell verarbeiteten Eingabedatei.
- **$0 und n** Wie bereits erwähnt, steht `0` für den gesamten aktuellen Datensatz, während `n` (z. B. `1, $2`) das n-te Feld in diesem Datensatz darstellt.
- RSTART & RLENGTH Wird in Verbindung mit der Funktion match() verwendet. Nach einer erfolgreichen Übereinstimmung speichert RSTART die Startposition (Index) der gefundenen Teilzeichenkette und RLENGTH deren Länge.
- CONVFMT & OFMT Diese Variablen steuern das Format für die Umwandlung von Zahlen in Zeichenketten (CONVFMT) und das Ausgabeformat für Zahlen, die mit dem Befehl „print“ gedruckt werden (OFMT). Der Standardwert ist für beide %.6g.
- SUBSEP Diese Variable legt das Indextrennzeichen fest, das zur Simulation mehrdimensionaler Arrays verwendet wird. Standardmäßig wird das nicht druckbare Zeichen \034 verwendet.
- UMWELT Ein assoziatives Array, das Zugriff auf die Umgebungsvariablen der Shell ermöglicht.
5.3. GNU AWK (GAWK)-spezifische Variablen
GAWK bietet über seine eigenen eingebauten Variablen mehrere Erweiterungen des POSIX-Standards.
- ARGINDDer Index im ARGV-Array, der auf die aktuell verarbeitete Datei verweist.
- FALL IGNORIEREN: Wenn ein Wert ungleich Null angegeben wird, wird die Groß-/Kleinschreibung bei der Mustererkennung für alle regulären Ausdrucksoperationen ignoriert.
- FEHLERNOWenn eine Umleitung oder eine close()-Operation fehlschlägt, enthält diese Variable eine systemabhängige Fehlermeldung.
- FELDBREITENEine durch Leerzeichen getrennte Liste von Zahlen, die GAWK anweist, Datensätze anhand fester Feldbreiten zu analysieren, anstatt die Variable FS zu verwenden.
- FUSSELErmöglicht die dynamische Steuerung des Lintings. Durch Aktivieren dieser Option werden Warnungen zu nicht portablen oder fragwürdigen Codekonstrukten ausgegeben.
- PROCINFO: Ein assoziatives Array, das Informationen über den laufenden Prozess enthält, wie zum Beispiel seine Prozess-ID (PROCINFO[“pid”]).
- TEXTDOMAINWird für die Internationalisierung verwendet, um die Textdomäne für den Abruf lokalisierter Programmzeichenfolgen festzulegen.
- BINMODUSWird auf Nicht-POSIX-Systemen verwendet, um den Binärmodus für Datei-E/A-Operationen festzulegen.
Nachdem wir nun verstanden haben, wie AWK Daten speichert und den Zugriff darauf über Variablen ermöglicht, ist der nächste logische Schritt, die Operatoren zu untersuchen, die zur Manipulation dieser Daten verwendet werden.