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