AWK - Eingebaute Variablen
AWK bietet mehrere integrierte Variablen. Sie spielen eine wichtige Rolle beim Schreiben von AWK-Skripten. Dieses Kapitel zeigt die Verwendung integrierter Variablen.
Standard-AWK-Variablen
Die Standard-AWK-Variablen werden unten diskutiert.
ARGC
Dies impliziert die Anzahl der in der Befehlszeile angegebenen Argumente.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Arguments = 5
Aber warum zeigt AWK 5, wenn Sie nur 4 Argumente übergeben haben? Überprüfen Sie einfach das folgende Beispiel, um Ihre Zweifel auszuräumen.
ARGV
Es ist ein Array, in dem die Befehlszeilenargumente gespeichert sind. Der gültige Index des Arrays reicht von 0 bis ARGC-1.
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Es repräsentiert das Konvertierungsformat für Zahlen. Der Standardwert ist%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Conversion Format = %.6g
UMWELT
Es ist ein assoziatives Array von Umgebungsvariablen.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
jerry
Verwenden Sie, um Namen anderer Umgebungsvariablen zu finden env Befehl.
DATEINAME
Es repräsentiert den aktuellen Dateinamen.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
marks.txt
Bitte beachten Sie, dass FILENAME im BEGIN-Block undefiniert ist.
FS
Es stellt das (Eingabe-) Feldtrennzeichen dar und sein Standardwert ist Leerzeichen. Sie können dies auch mit ändern-F Befehlszeilenoption.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
FS = $
NF
Es repräsentiert die Anzahl der Felder im aktuellen Datensatz. Im folgenden Beispiel werden beispielsweise nur die Zeilen gedruckt, die mehr als zwei Felder enthalten.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
One Two Three
One Two Three Four
NR
Es repräsentiert die Nummer des aktuellen Datensatzes. Im folgenden Beispiel wird der Datensatz beispielsweise gedruckt, wenn die aktuelle Datensatznummer weniger als drei beträgt.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
One Two
One Two Three
FNR
Es ähnelt NR, ist jedoch relativ zur aktuellen Datei. Dies ist nützlich, wenn AWK mit mehreren Dateien arbeitet. Der Wert von FNR wird mit neuer Datei zurückgesetzt.
OFMT
Es stellt die Nummer des Ausgabeformats dar und der Standardwert ist %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
OFMT = %.6g
OFS
Es stellt das Ausgabefeldtrennzeichen dar und sein Standardwert ist Leerzeichen.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
OFS = $
ORS
Es stellt das Trennzeichen für den Ausgabedatensatz dar und der Standardwert ist newline.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
ORS = $
$
LÄNGE
Es repräsentiert die Länge der Zeichenfolge, mit der übereinstimmt matchFunktion. Die Übereinstimmungsfunktion von AWK sucht nach einer bestimmten Zeichenfolge in der Eingabezeichenfolge.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
2
RS
Es stellt das (Eingabe-) Datensatztrennzeichen dar und sein Standardwert ist newline.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
RS = $
$
Neustart
Es stellt die erste Position in der Zeichenfolge dar, die mit übereinstimmt match Funktion.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
9
SUBSEP
Es stellt das Trennzeichen für Array-Indizes dar und der Standardwert ist \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
SUBSEP = ^\$
$ 0
Es repräsentiert den gesamten Eingabedatensatz.
Example
[jerry]$ awk '{print $0}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Es stellt das n- te Feld im aktuellen Datensatz dar, in dem die Felder durch FS getrennt sind.
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
GNU AWK-spezifische Variablen
GNU AWK-spezifische Variablen sind wie folgt:
ARGIND
Es repräsentiert den Index in ARGV der aktuell verarbeiteten Datei.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
Es wird verwendet, um den Binärmodus für alle Datei-E / A auf Nicht-POSIX-Systemen anzugeben. Numerische Werte von 1, 2 oder 3 geben an, dass Eingabedateien, Ausgabedateien oder alle Dateien binäre E / A verwenden sollen. String-Werte vonr oder wGeben Sie an, dass Eingabedateien bzw. Ausgabedateien binäre E / A verwenden sollen. String-Werte vonrw oder wr Geben Sie an, dass alle Dateien binäre E / A verwenden sollen.
ERRNO
Eine Zeichenfolge zeigt einen Fehler an, wenn eine Umleitung für fehlschlägt getline oder wenn close Anruf schlägt fehl.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Error: No such file or directory
FELDBREITEN
Es wird eine durch Leerzeichen getrennte Liste der Feldbreitenvariablen festgelegt. GAWK analysiert die Eingabe in Felder mit fester Breite, anstatt den Wert der FS-Variablen als Feldtrennzeichen zu verwenden.
FALL IGNORIEREN
Wenn diese Variable gesetzt ist, wird bei GAWK die Groß- und Kleinschreibung nicht berücksichtigt. Das folgende Beispiel zeigt dies -
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
1) Amit Physics 80
FUSSEL
Es bietet eine dynamische Steuerung der --lintOption aus dem GAWK-Programm. Wenn diese Variable eingestellt ist, druckt GAWK Flusenwarnungen. Wenn der Zeichenfolgenwert fatal zugewiesen wird, werden Flusenwarnungen genau wie zu schwerwiegenden Fehlern--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
Dies ist ein assoziatives Array, das Informationen über den Prozess enthält, z. B. echte und effektive UID-Nummern, Prozess-ID-Nummern usw.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
4316
TEXTDOMAIN
Es repräsentiert die Textdomäne des AWK-Programms. Es wird verwendet, um die lokalisierten Übersetzungen für die Zeichenfolgen des Programms zu finden.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
messages
Die obige Ausgabe zeigt englischen Text aufgrund von en_IN Gebietsschema