AWK - Kurzanleitung
AWK ist eine interpretierte Programmiersprache. Es ist sehr leistungsfähig und speziell für die Textverarbeitung entwickelt. Sein Name leitet sich von den Familiennamen seiner Autoren ab -Alfred Aho, Peter Weinberger, and Brian Kernighan.
Die von GNU / Linux vertriebene Version von AWK wird von der Free Software Foundation (FSF) geschrieben und verwaltet. es wird oft als bezeichnetGNU AWK.
Arten von AWK
Es folgen die Varianten von AWK -
AWK - Original AWK von AT & T Laboratory.
NAWK - Neuere und verbesserte Version von AWK von AT & T Laboratory.
GAWK- Es ist GNU AWK. Alle GNU / Linux-Distributionen werden mit GAWK ausgeliefert. Es ist voll kompatibel mit AWK und NAWK.
Typische Verwendungen von AWK
Mit AWK können unzählige Aufgaben erledigt werden. Nachfolgend sind nur einige davon aufgeführt -
- Textverarbeitung,
- Erstellen formatierter Textberichte,
- Arithmetische Operationen ausführen,
- Durchführen von Zeichenfolgenoperationen und vielem mehr.
In diesem Kapitel wird beschrieben, wie Sie die AWK-Umgebung auf Ihrem GNU / Linux-System einrichten.
Installation mit Package Manager
Im Allgemeinen ist AWK auf den meisten GNU / Linux-Distributionen standardmäßig verfügbar. Sie können verwendenwhichBefehl, um zu überprüfen, ob es auf Ihrem System vorhanden ist oder nicht. Falls Sie kein AWK haben, installieren Sie es mit dem Advance Package Tool auf Debian-basiertem GNU / Linux(APT) Paketmanager wie folgt -
[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk
Verwenden Sie zum Installieren von AWK unter RPM-basiertem GNU / Linux den Yellowdog Updator Modifier yum Paketmanager wie folgt -
[root]# yum install gawk
Stellen Sie nach der Installation sicher, dass AWK über die Befehlszeile zugänglich ist.
[jerry]$ which awk
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
/usr/bin/awk
Installation aus dem Quellcode
Da GNU AWK Teil des GNU-Projekts ist, steht der Quellcode zum kostenlosen Download zur Verfügung. Wir haben bereits gesehen, wie AWK mit dem Paketmanager installiert wird. Lassen Sie uns nun verstehen, wie AWK aus dem Quellcode installiert wird.
Die folgende Installation gilt für jede GNU / Linux-Software und für die meisten anderen frei verfügbaren Programme. Hier sind die Installationsschritte -
Step 1- Laden Sie den Quellcode von einem authentischen Ort herunter. Das Befehlszeilenprogrammwget dient diesem Zweck.
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
Step 2 - Dekomprimieren und extrahieren Sie den heruntergeladenen Quellcode.
[jerry]$ tar xvf gawk-4.1.1.tar.xz
Step 3 - Wechseln Sie in das Verzeichnis und führen Sie configure aus.
[jerry]$ ./configure
Step 4 - Nach erfolgreichem Abschluss wird die configuregeneriert Makefile. Geben Sie a ein, um den Quellcode zu kompilierenmake Befehl.
[jerry]$ make
Step 5- Sie können die Testsuite ausführen, um sicherzustellen, dass der Build sauber ist. Dies ist ein optionaler Schritt.
[jerry]$ make check
Step 6- Installieren Sie abschließend AWK. Stellen Sie sicher, dass Sie über Superuser-Berechtigungen verfügen.
[jerry]$ sudo make install
Das ist es! Sie haben AWK erfolgreich kompiliert und installiert. Überprüfen Sie dies, indem Sie das ausführenawk Befehl wie folgt -
[jerry]$ which awk
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
/usr/bin/awk
Um ein erfahrener AWK-Programmierer zu werden, müssen Sie seine Interna kennen. AWK folgt einem einfachen Workflow - Lesen, Ausführen und Wiederholen. Das folgende Diagramm zeigt den Workflow von AWK -
Lesen
AWK liest eine Zeile aus dem Eingabestream (Datei, Pipe oder Standard) und speichert sie im Speicher.
Ausführen
Alle AWK-Befehle werden nacheinander auf den Eingang angewendet. Standardmäßig führt AWK Befehle in jeder Zeile aus. Wir können dies einschränken, indem wir Muster bereitstellen.
Wiederholen
Dieser Vorgang wird wiederholt, bis die Datei ihr Ende erreicht hat.
Programmstruktur
Lassen Sie uns nun die Programmstruktur von AWK verstehen.
BEGIN Block
Die Syntax des BEGIN-Blocks lautet wie folgt:
Syntax
BEGIN {awk-commands}
Der BEGIN-Block wird beim Programmstart ausgeführt. Es wird nur einmal ausgeführt. Dies ist ein guter Ort, um Variablen zu initialisieren. BEGIN ist ein AWK-Schlüsselwort und muss daher in Großbuchstaben geschrieben werden. Bitte beachten Sie, dass dieser Block optional ist.
Körperblock
Die Syntax des Bodyblocks lautet wie folgt:
Syntax
/pattern/ {awk-commands}
Der Bodyblock wendet AWK-Befehle auf jede Eingabezeile an. Standardmäßig führt AWK Befehle in jeder Zeile aus. Wir können dies einschränken, indem wir Muster bereitstellen. Beachten Sie, dass für den Body-Block keine Schlüsselwörter vorhanden sind.
END Block
Die Syntax des END-Blocks lautet wie folgt:
Syntax
END {awk-commands}
Der END-Block wird am Ende des Programms ausgeführt. END ist ein AWK-Schlüsselwort und muss daher in Großbuchstaben geschrieben werden. Bitte beachten Sie, dass dieser Block optional ist.
Lassen Sie uns eine Datei erstellen marks.txt Hier finden Sie die Seriennummer, den Namen des Schülers, den Namen des Fachs und die Anzahl der erhaltenen Noten.
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Lassen Sie uns nun den Dateiinhalt mit Header mithilfe des AWK-Skripts anzeigen.
Example
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
Wenn dieser Code ausgeführt wird, wird das folgende Ergebnis erzeugt:
Output
Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Zu Beginn druckt AWK den Header aus dem BEGIN-Block. Dann liest es im Body-Block eine Zeile aus einer Datei und führt den Druckbefehl von AWK aus, der nur den Inhalt des Standardausgabestreams druckt. Dieser Vorgang wird wiederholt, bis die Datei das Ende erreicht hat.
AWK ist einfach zu bedienen. Wir können AWK-Befehle entweder direkt über die Befehlszeile oder in Form einer Textdatei mit AWK-Befehlen bereitstellen.
AWK-Befehlszeile
Wir können einen AWK-Befehl in einfachen Anführungszeichen in der Befehlszeile angeben, wie gezeigt -
awk [options] file ...
Beispiel
Betrachten Sie eine Textdatei marks.txt mit folgendem Inhalt -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Lassen Sie uns den gesamten Inhalt der Datei mit AWK wie folgt anzeigen:
Example
[jerry]$ awk '{print}' 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
AWK-Programmdatei
Wir können AWK-Befehle in einer Skriptdatei wie gezeigt bereitstellen -
awk [options] -f file ....
Erstellen Sie zunächst eine Textdatei command.awk mit dem AWK-Befehl wie unten gezeigt -
{print}
Jetzt können wir die AWK anweisen, Befehle aus der Textdatei zu lesen und die Aktion auszuführen. Hier erzielen wir das gleiche Ergebnis wie im obigen Beispiel.
Example
[jerry]$ awk -f command.awk 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
AWK Standardoptionen
AWK unterstützt die folgenden Standardoptionen, die über die Befehlszeile bereitgestellt werden können.
Die Option -v
Diese Option weist einer Variablen einen Wert zu. Es ermöglicht die Zuweisung vor der Programmausführung. Das folgende Beispiel beschreibt die Verwendung der Option -v.
Example
[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Name = Jerry
Die Option --dump-variables [= file]
Es wird eine sortierte Liste globaler Variablen und ihrer endgültigen Werte in die Datei gedruckt. Die Standarddatei istawkvars.out.
Example
[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"
Die Option --help
Diese Option druckt die Hilfemeldung in der Standardausgabe.
Example
[jerry]$ awk --help
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options : GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options : GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
Die Option --lint [= fatal]
Diese Option ermöglicht die Überprüfung nicht portabler oder zweifelhafter Konstrukte. Wenn ein Streitfatalbereitgestellt wird, werden Warnmeldungen als Fehler behandelt. Das folgende Beispiel zeigt dies -
Example
[jerry]$ awk --lint '' /bin/ls
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!
Die Option --posix
Diese Option aktiviert die strikte POSIX-Kompatibilität, bei der alle gängigen und gawk-spezifischen Erweiterungen deaktiviert sind.
Die Option --profile [= Datei]
Diese Option generiert eine hübsch gedruckte Version des Programms in der Datei. Standarddatei istawkprof.out. Das folgende einfache Beispiel veranschaulicht dies -
Example
[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
# gawk profile, created Sun Oct 26 19:50:48 2014
# BEGIN block(s)
BEGIN {
printf "---|Header|--\n"
}
# Rule(s) {
print $0
}
# END block(s)
END {
printf "---|Footer|---\n"
}
Die Option --traditional
Diese Option deaktiviert alle gawk-spezifischen Erweiterungen.
Die Option --version
Diese Option zeigt die Versionsinformationen des AWK-Programms an.
Example
[jerry]$ awk --version
Wenn dieser Code ausgeführt wird, wird das folgende Ergebnis erzeugt:
Output
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
In diesem Kapitel werden einige nützliche AWK-Befehle und ihre entsprechenden Beispiele beschrieben. Betrachten Sie eine Textdateimarks.txt mit folgendem Inhalt zu verarbeiten -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Spalte oder Feld drucken
Sie können AWK anweisen, nur bestimmte Spalten aus dem Eingabefeld zu drucken. Das folgende Beispiel zeigt dies -
Beispiel
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Physics 80
Maths 90
Biology 87
English 85
History 89
In der Datei marks.txtDie dritte Spalte enthält den Betreffnamen und die vierte Spalte enthält die in einem bestimmten Betreff erzielten Noten. Drucken wir diese beiden Spalten mit dem Befehl AWK print. Im obigen Beispiel ist$3 and $4 repräsentieren das dritte bzw. das vierte Feld aus dem Eingabedatensatz.
Alle Zeilen drucken
Standardmäßig druckt AWK alle Linien, die dem Muster entsprechen.
Beispiel
[jerry]$ awk '/a/ {print $0}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Im obigen Beispiel suchen wir nach Formularmustern a. Wenn eine Musterübereinstimmung erfolgreich ist, führt sie einen Befehl aus dem Bodyblock aus. Wenn kein Bodyblock vorhanden ist, wird eine Standardaktion ausgeführt, bei der der Datensatz gedruckt wird. Daher führt der folgende Befehl zum gleichen Ergebnis:
Beispiel
[jerry]$ awk '/a/' marks.txt
Spalten nach Muster drucken
Wenn eine Musterübereinstimmung erfolgreich ist, druckt AWK standardmäßig den gesamten Datensatz. Sie können AWK jedoch anweisen, nur bestimmte Felder zu drucken. Im folgenden Beispiel wird beispielsweise das dritte und vierte Feld gedruckt, wenn eine Musterübereinstimmung erfolgreich ist.
Beispiel
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Maths 90
Biology 87
English 85
History 89
Spalte in beliebiger Reihenfolge drucken
Sie können Spalten in beliebiger Reihenfolge drucken. Im folgenden Beispiel wird beispielsweise die vierte Spalte gefolgt von der dritten Spalte gedruckt.
Beispiel
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
90 Maths
87 Biology
85 English
89 History
Übereinstimmende Muster zählen und drucken
Lassen Sie uns ein Beispiel sehen, in dem Sie die Anzahl der Zeilen zählen und drucken können, für die eine Musterübereinstimmung erfolgreich war.
Beispiel
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Count = 4
In diesem Beispiel erhöhen wir den Wert des Zählers, wenn eine Musterübereinstimmung erfolgreich ist, und drucken diesen Wert im END-Block. Beachten Sie, dass im Gegensatz zu anderen Programmiersprachen keine Variable deklariert werden muss, bevor Sie sie verwenden.
Druckzeilen mit mehr als 18 Zeichen
Drucken wir nur die Zeilen, die mehr als 18 Zeichen enthalten.
Beispiel
[jerry]$ awk 'length($0) > 18' marks.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
3) Shyam Biology 87
4) Kedar English 85
AWK bietet eine eingebaute length Funktion, die die Länge der Zeichenfolge zurückgibt. $0Die Variable speichert die gesamte Zeile. Wenn kein Bodyblock vorhanden ist, wird die Standardaktion ausgeführt, dh die Druckaktion. Wenn eine Zeile mehr als 18 Zeichen enthält, ist das Vergleichsergebnis wahr und die Zeile wird gedruckt.
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 Match-Funktion 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
Wie andere Programmiersprachen bietet auch AWK eine große Anzahl von Operatoren. In diesem Kapitel werden AWK-Bediener anhand geeigneter Beispiele erläutert.
S.No. | Operatoren & Beschreibung |
---|---|
1 | Rechenzeichen AWK unterstützt die folgenden arithmetischen Operatoren. |
2 | Inkrementierungs- und Dekrementierungsoperatoren AWK unterstützt die folgenden Inkrementierungs- und Dekrementierungsoperatoren. |
3 | Zuweisungsoperatoren AWK unterstützt die folgenden Zuweisungsoperatoren. |
4 | Vergleichsoperatoren AWK unterstützt die folgenden Vergleichsoperatoren. |
5 | Logische Operatoren AWK unterstützt die folgenden logischen Operatoren. |
6 | Ternärer Operator Wir können einen Bedingungsausdruck einfach mit dem ternären Operator implementieren. |
7 | Unäre Operatoren AWK unterstützt die folgenden unären Operatoren. |
8 | Exponentielle Operatoren Es gibt zwei Formate von Exponentialoperatoren. |
9 | String-Verkettungsoperator Space ist ein String-Verkettungsoperator, der zwei Strings zusammenführt. |
10 | Array-Mitgliedschaftsoperator Es wird vertreten durch in. Es wird beim Zugriff auf Array-Elemente verwendet. |
11 | Operatoren für reguläre Ausdrücke In diesem Beispiel werden die beiden Formen von Operatoren für reguläre Ausdrücke erläutert. |
AWK ist sehr leistungsfähig und effizient im Umgang mit regulären Ausdrücken. Eine Reihe komplexer Aufgaben kann mit einfachen regulären Ausdrücken gelöst werden. Jeder Befehlszeilenexperte kennt die Leistungsfähigkeit regulärer Ausdrücke.
Dieses Kapitel behandelt reguläre Standardausdrücke mit geeigneten Beispielen.
Punkt
Es stimmt mit jedem einzelnen Zeichen außer dem Zeilenendezeichen überein. Das folgende Beispiel stimmt beispielsweise übereinfin, fun, fan usw.
Beispiel
[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
fun
fin
fan
Zeilenanfang
Es entspricht dem Zeilenanfang. Im folgenden Beispiel werden beispielsweise alle Zeilen gedruckt, die mit dem Muster beginnenThe.
Beispiel
[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
There
Their
Ende der Linie
Es entspricht dem Zeilenende. Im folgenden Beispiel werden beispielsweise die Zeilen gedruckt, die mit dem Buchstaben endenn.
Beispiel
[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
Ausgabe
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
fun
fin
fan
Zeichensatz abgleichen
Es wird verwendet, um nur eines von mehreren Zeichen abzugleichen. Das folgende Beispiel entspricht beispielsweise dem MusterCall und Tall aber nicht Ball.
Beispiel
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'
Ausgabe
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Call
Tall
Exklusives Set
Im exklusiven Satz negiert das Karat den Zeichensatz in den eckigen Klammern. Das folgende Beispiel wird beispielsweise nur gedrucktBall.
Beispiel
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Ball
Änderung
Mit einem vertikalen Balken können reguläre Ausdrücke logisch ODER-verknüpft werden. Das folgende Beispiel wird beispielsweise gedrucktBall und Call.
Beispiel
[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Call
Ball
Null oder ein Vorkommen
Es entspricht null oder einem Vorkommen des vorhergehenden Zeichens. Das folgende Beispiel stimmt beispielsweise übereinColour ebenso gut wie Color. Wir haben gemachtu als optionales Zeichen mit ?.
Beispiel
[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Colour
Color
Null oder mehr Vorkommen
Es entspricht null oder mehr Vorkommen des vorhergehenden Zeichens. Das folgende Beispiel stimmt beispielsweise übereinca, cat, catt, und so weiter.
Beispiel
[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
ca
cat
catt
Ein oder mehrere Vorkommen
Es entspricht einem oder mehreren Vorkommen des vorhergehenden Zeichens. Das folgende Beispiel entspricht beispielsweise einem oder mehreren Vorkommen des2.
Beispiel
[jerry]$ echo -e "111\n22\n123\n234\n456\n222" | awk '/2+/'
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
22
123
234
222
Gruppierung
Parentheses ()werden für die Gruppierung und das Zeichen | verwendet wird für Alternativen verwendet. Beispielsweise stimmt der folgende reguläre Ausdruck mit den Zeilen überein, die entweder beides enthaltenApple Juice or Apple Cake.
Beispiel
[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk
'/Apple (Juice|Cake)/'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Apple Juice
Apple Cake
AWK verfügt über assoziative Arrays und eines der besten daran ist, dass die Indizes keine fortlaufenden Zahlen sein müssen. Sie können entweder eine Zeichenfolge oder eine Zahl als Array-Index verwenden. Es ist auch nicht erforderlich, die Größe eines Arrays im Voraus zu deklarieren - Arrays können zur Laufzeit erweitert / verkleinert werden.
Die Syntax lautet wie folgt:
Syntax
array_name[index] = value
Wo array_name ist der Name des Arrays, index ist der Array-Index und value ist ein beliebiger Wert, der dem Element des Arrays zugewiesen wird.
Array erstellen
Um mehr über das Array zu erfahren, erstellen wir die Elemente eines Arrays und greifen darauf zu.
Beispiel
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange"
print fruits["orange"] "\n" fruits["mango"]
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
orange
yellow
Im obigen Beispiel deklarieren wir das Array als fruitsderen Index ist der Fruchtname und der Wert ist die Farbe der Frucht. Um auf Array-Elemente zuzugreifen, verwenden wirarray_name[index] Format.
Array-Elemente löschen
Zum Einfügen haben wir den Zuweisungsoperator verwendet. Ebenso können wir verwendendeleteAnweisung zum Entfernen eines Elements aus dem Array. Die Syntax der delete-Anweisung lautet wie folgt:
Syntax
delete array_name[index]
Im folgenden Beispiel wird das Element gelöscht orange. Daher zeigt der Befehl keine Ausgabe an.
Beispiel
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange";
delete fruits["orange"];
print fruits["orange"]
}'
Mehrdimensionale Arrays
AWK unterstützt nur eindimensionale Arrays. Mit dem eindimensionalen Array selbst können Sie jedoch problemlos ein mehrdimensionales Array simulieren.
Zum Beispiel ist unten ein 3x3 zweidimensionales Array angegeben -
100 200 300
400 500 600
700 800 900
Im obigen Beispiel speichert Array [0] [0] 100, Array [0] [1] 200 usw. Um 100 am Array-Speicherort [0] [0] zu speichern, können wir die folgende Syntax verwenden:
Syntax
array["0,0"] = 100
Obwohl wir gaben 0,0Als Index sind dies keine zwei Indizes. In Wirklichkeit ist es nur ein Index mit der Zeichenfolge0,0.
Das folgende Beispiel simuliert ein 2D-Array -
Beispiel
[jerry]$ awk 'BEGIN {
array["0,0"] = 100;
array["0,1"] = 200;
array["0,2"] = 300;
array["1,0"] = 400;
array["1,1"] = 500;
array["1,2"] = 600;
# print array elements
print "array[0,0] = " array["0,0"];
print "array[0,1] = " array["0,1"];
print "array[0,2] = " array["0,2"];
print "array[1,0] = " array["1,0"];
print "array[1,1] = " array["1,1"];
print "array[1,2] = " array["1,2"];
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600
Sie können auch eine Vielzahl von Operationen an einem Array ausführen, z. B. das Sortieren seiner Elemente / Indizes. Zu diesem Zweck können Sie verwendenassort und asorti Funktionen
Wie andere Programmiersprachen bietet AWK bedingte Anweisungen zur Steuerung des Programmflusses. In diesem Kapitel werden die Steueranweisungen von AWK anhand geeigneter Beispiele erläutert.
If-Anweisung
Es testet einfach die Bedingung und führt abhängig von der Bedingung bestimmte Aktionen aus. Unten ist die Syntax von angegebenif Aussage -
Syntax
if (condition)
action
Wir können auch ein Paar geschweifte Klammern verwenden, wie unten angegeben, um mehrere Aktionen auszuführen -
Syntax
if (condition) {
action-1
action-1
.
.
action-n
}
Das folgende Beispiel prüft beispielsweise, ob eine Zahl gerade ist oder nicht -
Beispiel
[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
10 is even number.
Wenn sonst Aussage
Im if-else Syntax können wir eine Liste von Aktionen bereitstellen, die ausgeführt werden sollen, wenn eine Bedingung falsch wird.
Die Syntax von if-else Aussage ist wie folgt -
Syntax
if (condition)
action-1
else
action-2
In der obigen Syntax wird Aktion-1 ausgeführt, wenn die Bedingung als wahr ausgewertet wird, und Aktion-2 wird ausgeführt, wenn die Bedingung als falsch ausgewertet wird. Das folgende Beispiel prüft beispielsweise, ob eine Zahl gerade ist oder nicht -
Beispiel
[jerry]$ awk 'BEGIN {
num = 11; if (num % 2 == 0) printf "%d is even number.\n", num;
else printf "%d is odd number.\n", num
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
11 is odd number.
Wenn-sonst-wenn-Leiter
Wir können leicht eine erstellen if-else-if Leiter mit mehreren if-elseAussagen. Das folgende Beispiel zeigt dies -
Beispiel
[jerry]$ awk 'BEGIN {
a = 30;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
a = 30
In diesem Kapitel werden die AWK-Schleifen anhand eines geeigneten Beispiels erläutert. Schleifen werden verwendet, um eine Reihe von Aktionen wiederholt auszuführen. Die Schleifenausführung wird fortgesetzt, solange die Schleifenbedingung erfüllt ist.
Für Schleife
Die Syntax von for Schleife ist -
Syntax
for (initialization; condition; increment/decrement)
action
Anfangs ist die forDie Anweisung führt eine Initialisierungsaktion aus und überprüft dann die Bedingung. Wenn die Bedingung erfüllt ist, werden Aktionen ausgeführt und anschließend eine Inkrementierungs- oder Dekrementierungsoperation ausgeführt. Die Schleifenausführung wird fortgesetzt, solange die Bedingung erfüllt ist. Im folgenden Beispiel werden beispielsweise 1 bis 5 mit gedrucktfor Schleife -
Beispiel
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
1
2
3
4
5
While-Schleife
Das whileDie Schleife führt die Aktion so lange aus, bis eine bestimmte logische Bedingung als wahr ausgewertet wird. Hier ist die Syntax vonwhile Schleife -
Syntax
while (condition)
action
AWK überprüft zuerst den Zustand; Wenn die Bedingung erfüllt ist, wird die Aktion ausgeführt. Dieser Vorgang wird wiederholt, solange die Schleifenbedingung als wahr ausgewertet wird. Im folgenden Beispiel werden beispielsweise 1 bis 5 mit gedrucktwhile Schleife -
Beispiel
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
1
2
3
4
5
Do-While-Schleife
Das do-whileDie Schleife ähnelt der while-Schleife, außer dass die Testbedingung am Ende der Schleife ausgewertet wird. Hier ist die Syntax vondo-whileSchleife -
Syntax
do
action
while (condition)
In einem do-whileIn einer Schleife wird die Aktionsanweisung mindestens einmal ausgeführt, selbst wenn die Bedingungsanweisung den Wert false hat. Im folgenden Beispiel werden beispielsweise 1 bis 5 Zahlen mit gedrucktdo-while Schleife -
Beispiel
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
1
2
3
4
5
Break Statement
Wie der Name schon sagt, wird es verwendet, um die Schleifenausführung zu beenden. Hier ist ein Beispiel, das die Schleife beendet, wenn die Summe größer als 50 wird.
Beispiel
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Erklärung fortsetzen
Das continueDie Anweisung wird innerhalb einer Schleife verwendet, um zur nächsten Iteration der Schleife zu springen. Dies ist nützlich, wenn Sie die Verarbeitung einiger Daten innerhalb der Schleife überspringen möchten. Im folgenden Beispiel wird beispielsweise verwendetcontinue Anweisung zum Drucken der geraden Zahlen zwischen 1 und 20.
Beispiel
[jerry]$ awk 'BEGIN {
for (i = 1; i <= 20; ++i) {
if (i % 2 == 0) print i ; else continue
}
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
2
4
6
8
10
12
14
16
18
20
Exit-Anweisung
Es wird verwendet, um die Ausführung des Skripts zu stoppen. Es akzeptiert eine Ganzzahl als Argument, das den Exit-Statuscode für den AWK-Prozess darstellt. Wenn kein Argument angegeben wird,exitgibt den Status Null zurück. Hier ist ein Beispiel, das die Ausführung stoppt, wenn die Summe größer als 50 wird.
Beispiel
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
Ausgabe
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Lassen Sie uns den Rückgabestatus des Skripts überprüfen.
Beispiel
[jerry]$ echo $?
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
10
In AWK sind eine Reihe von Funktionen integriert, die dem Programmierer immer zur Verfügung stehen. In diesem Kapitel werden Arithmetik, String, Zeit, Bitmanipulation und andere verschiedene Funktionen anhand geeigneter Beispiele beschrieben.
S.No. | Eingebaute Funktionen & Beschreibung |
---|---|
1 | Arithmetische Funktionen AWK verfügt über die folgenden integrierten Rechenfunktionen. |
2 | String-Funktionen AWK verfügt über die folgenden integrierten String-Funktionen. |
3 | Zeitfunktionen AWK verfügt über die folgenden integrierten Zeitfunktionen. |
4 | Bitmanipulationsfunktionen AWK verfügt über die folgenden integrierten Bitmanipulationsfunktionen. |
5 | Verschiedene Funktionen AWK hat die folgenden verschiedenen Funktionen. |
Funktionen sind Grundbausteine eines Programms. Mit AWK können wir unsere eigenen Funktionen definieren. Ein großes Programm kann in Funktionen unterteilt werden und jede Funktion kann unabhängig geschrieben / getestet werden. Es bietet Wiederverwendbarkeit von Code.
Im Folgenden ist das allgemeine Format einer benutzerdefinierten Funktion angegeben.
Syntax
function function_name(argument1, argument2, ...) {
function body
}
In dieser Syntax wird die function_nameist der Name der benutzerdefinierten Funktion. Der Funktionsname sollte mit einem Buchstaben beginnen und der Rest der Zeichen kann eine beliebige Kombination aus Zahlen, alphabetischen Zeichen oder Unterstrichen sein. Die Reservewörter von AWK können nicht als Funktionsnamen verwendet werden.
Funktionen können mehrere durch Komma getrennte Argumente akzeptieren. Argumente sind nicht obligatorisch. Sie können auch eine benutzerdefinierte Funktion ohne Argument erstellen.
function body besteht aus einer oder mehreren AWK-Anweisungen.
Schreiben wir zwei Funktionen, die die minimale und die maximale Anzahl berechnen, und rufen diese Funktionen von einer anderen aufgerufenen Funktion auf main. Dasfunctions.awk Datei enthält -
Beispiel
# Returns minimum number
function find_min(num1, num2){
if (num1 < num2)
return num1
return num2
}
# Returns maximum number
function find_max(num1, num2){
if (num1 > num2)
return num1
return num2
}
# Main function
function main(num1, num2){
# Find minimum number
result = find_min(10, 20)
print "Minimum =", result
# Find maximum number
result = find_max(10, 20)
print "Maximum =", result
}
# Script execution starts here
BEGIN {
main(10, 20)
}
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Minimum = 10
Maximum = 20
Bisher haben wir Daten zum Standardausgabestream angezeigt. Wir können Daten auch in eine Datei umleiten. Nach dem wird eine Umleitung angezeigtprint oder printfErklärung. Umleitungen in AWK werden genauso wie Umleitungen in Shell-Befehlen geschrieben, außer dass sie im AWK-Programm geschrieben werden. In diesem Kapitel wird die Umleitung anhand geeigneter Beispiele erläutert.
Umleitungsoperator
Die Syntax des Umleitungsoperators lautet -
Syntax
print DATA > output-file
Es schreibt die Daten in die output-file. Wenn die Ausgabedatei nicht vorhanden ist, wird eine erstellt. Wenn diese Art der Umleitung verwendet wird, wird die Ausgabedatei gelöscht, bevor die erste Ausgabe in sie geschrieben wird. Nachfolgende Schreibvorgänge in dieselbe Ausgabedatei löschen die Ausgabedatei nicht, sondern hängen sie an. Das folgende Beispiel schreibt beispielsweiseHello, World !!! in die Datei.
Lassen Sie uns eine Datei mit einigen Textdaten erstellen.
Beispiel
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Old data
Lassen Sie uns nun einige Inhalte mit dem Umleitungsoperator von AWK umleiten.
Beispiel
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Hello, World !!!
Operator anhängen
Die Syntax des Append-Operators lautet wie folgt:
Syntax
print DATA >> output-file
Es fügt die Daten in die output-file. Wenn die Ausgabedatei nicht vorhanden ist, wird eine erstellt. Wenn diese Art der Umleitung verwendet wird, werden neue Inhalte am Ende der Datei angehängt. Das folgende Beispiel wird beispielsweise angehängtHello, World !!! in die Datei.
Lassen Sie uns eine Datei mit einigen Textdaten erstellen.
Beispiel
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Old data
Lassen Sie uns nun einige Inhalte mit dem Append-Operator von AWK anhängen.
Beispiel
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Old data
Hello, World !!!
Rohr
Es ist möglich, eine Ausgabe über eine Pipe an ein anderes Programm zu senden, anstatt eine Datei zu verwenden. Diese Umleitung öffnet eine Pipe zum Befehl und schreibt die Werte von Elementen über diese Pipe in einen anderen Prozess, um den Befehl auszuführen. Der Befehl redirection argument ist eigentlich ein AWK-Ausdruck. Hier ist die Syntax von Pipe -
Syntax
print items | command
Lass uns benutzen tr Befehl zum Konvertieren von Kleinbuchstaben in Großbuchstaben.
Beispiel
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
HELLO, WORLD !!!
Zwei-Wege-Kommunikation
AWK kann mit einem externen Prozess kommunizieren |&, was wechselseitige Kommunikation ist. Im folgenden Beispiel wird beispielsweise verwendettrBefehl zum Konvertieren von Kleinbuchstaben in Großbuchstaben. Unserecommand.awk Datei enthält -
Beispiel
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
HELLO, WORLD !!!
Sieht das Skript kryptisch aus? Lasst es uns entmystifizieren.
Die erste Aussage, cmd = "tr [a-z] [A-Z]"ist der Befehl, mit dem wir die bidirektionale Kommunikation von AWK herstellen.
Die nächste Anweisung, dh der Druckbefehl, liefert Eingaben für die trBefehl. Hier&| zeigt bidirektionale Kommunikation an.
Die dritte Aussage, dh close(cmd, "to")schließt die to Prozess nach dem Wettbewerb seiner Ausführung.
Die nächste Aussage cmd |& getline out speichert die output in out Variable mit Hilfe der getline Funktion.
Die nächste print-Anweisung druckt die Ausgabe und schließlich die close Funktion schließt den Befehl.
Bisher haben wir AWKs verwendet print und printfFunktionen zum Anzeigen von Daten auf der Standardausgabe. Aber printf ist viel leistungsfähiger als das, was wir zuvor gesehen haben. Diese Funktion stammt aus der C-Sprache und ist sehr hilfreich bei der Erstellung formatierter Ausgaben. Unten ist die Syntax der printf-Anweisung -
Syntax
printf fmt, expr-list
In der obigen Syntax fmt ist eine Folge von Formatspezifikationen und Konstanten. expr-list ist eine Liste von Argumenten, die Formatspezifizierern entsprechen.
Escape-Sequenzen
Ähnlich wie bei jeder Zeichenfolge kann das Format eingebettete Escape-Sequenzen enthalten. Im Folgenden werden die von AWK unterstützten Escape-Sequenzen erläutert.
Neue Zeile
Das folgende Beispiel wird gedruckt Hello und World in separaten Zeilen mit Zeilenumbruchzeichen -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Hello
World
Horizontale Registerkarte
Im folgenden Beispiel wird eine horizontale Registerkarte verwendet, um verschiedene Felder anzuzeigen.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Sr No Name Sub Marks
Vertikale Registerkarte
Im folgenden Beispiel wird nach jeder Ablage eine vertikale Registerkarte verwendet.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Sr No
Name
Sub
Marks
Rücktaste
Im folgenden Beispiel wird nach jedem Feld außer dem letzten eine Rücktaste gedruckt. Es löscht die letzte Nummer aus den ersten drei Feldern. Zum Beispiel,Field 1 wird angezeigt als Field, weil das letzte Zeichen mit Rücktaste gelöscht wird. Allerdings das letzte FeldField 4 wird so angezeigt wie es ist, da wir keine hatten \b nach Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Field Field Field Field 4
Wagenrücklauf
Im folgenden Beispiel führen wir nach dem Drucken aller Felder a aus Carriage Return und drucken Sie den nächsten Wert über den aktuell gedruckten Wert. Dies bedeutet, dass Sie in der endgültigen Ausgabe nur sehen könnenField 4, da es das letzte war, was über alle vorherigen Felder gedruckt wurde.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Field 4
Formularvorschub
Im folgenden Beispiel wird der Formularvorschub nach dem Drucken der einzelnen Felder verwendet.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Sr No
Name
Sub
Marks
Formatbezeichner
Wie in der C-Sprache verfügt auch AWK über Formatspezifizierer. Die AWK-Version der printf-Anweisung akzeptiert die folgenden Konvertierungsspezifikationsformate:
% c
Es wird ein einzelnes Zeichen gedruckt. Wenn das Argument für verwendet wird%cist numerisch, wird als Zeichen behandelt und gedruckt. Andernfalls wird angenommen, dass das Argument eine Zeichenfolge ist, und das einzige erste Zeichen dieser Zeichenfolge wird gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
ASCII value 65 = character A
% d und% i
Es wird nur der ganzzahlige Teil einer Dezimalzahl gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Percentags = 80
% e und% E.
Es wird eine Gleitkommazahl der Form [-] d.dddddde [+ -] dd gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Percentags = 8.066000e+01
Das %E Format verwendet E anstelle von e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Percentags = 8.066000E+01
% f
Es wird eine Gleitkommazahl der Form [-] ddd.dddddd gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Percentags = 80.660000
% g und% G.
Verwendet die Konvertierung% e oder% f, je nachdem, welcher Wert kürzer ist, wobei nicht signifikante Nullen unterdrückt werden.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Percentags = 80.66
Das %G Format verwendet %E anstelle von% e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Percentags = 80.66
%Ö
Es wird eine vorzeichenlose Oktalzahl gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Octal representation of decimal number 10 = 12
% u
Es wird eine vorzeichenlose Dezimalzahl gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Unsigned 10 = 10
% s
Es wird eine Zeichenkette gedruckt.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Name = Sherlock Holmes
% x und% X.
Es wird eine vorzeichenlose Hexadezimalzahl gedruckt. Das%X Das Format verwendet Großbuchstaben anstelle von Kleinbuchstaben.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Hexadecimal representation of decimal number 15 = f
Verwenden Sie nun% X und beobachten Sie das Ergebnis -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Hexadecimal representation of decimal number 15 = F
%%
Es wird eine einzelne gedruckt % Zeichen und kein Argument wird konvertiert.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Percentags = 80%
Optionale Parameter mit%
Mit % Wir können folgende optionale Parameter verwenden -
Breite
Das Feld ist bis zum gepolstert width. Standardmäßig wird das Feld mit Leerzeichen aufgefüllt, aber wenn das Flag 0 verwendet wird, wird es mit Nullen aufgefüllt.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Num1 = 10
Num2 = 20
Führende Nullen
Eine führende Null fungiert als Flag, das angibt, dass die Ausgabe mit Nullen anstelle von Leerzeichen aufgefüllt werden soll. Bitte beachten Sie, dass dieses Flag nur dann wirksam wird, wenn das Feld breiter als der zu druckende Wert ist. Das folgende Beispiel beschreibt dies -
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Num1 = -0010
Num2 = 00020
Linke Begründung
Der Ausdruck sollte in seinem Feld linksbündig sein. Wenn die Eingabezeichenfolge kleiner als die angegebene Anzahl von Zeichen ist und Sie möchten, dass sie linksbündig ist, dh indem Sie rechts Leerzeichen hinzufügen, verwenden Sie ein Minuszeichen (-) unmittelbar nach dem% und vor der Zahl.
Im folgenden Beispiel wird die Ausgabe des AWK-Befehls an den Befehl cat weitergeleitet, um das Zeichen END OF LINE ($) anzuzeigen.
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Num = 10 $
Präfixzeichen
Numerischen Werten wird immer ein Vorzeichen vorangestellt, auch wenn der Wert positiv ist.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Num1 = -10
Num2 = +20
Hash
Für% o liefert es eine führende Null. Für% x und% X wird nur dann ein führendes 0x bzw. 0X geliefert, wenn das Ergebnis nicht Null ist. Für% e,% E,% f und% F enthält das Ergebnis immer einen Dezimalpunkt. Für% g und% G werden nachgestellte Nullen nicht aus dem Ergebnis entfernt. Das folgende Beispiel beschreibt dies -
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Output
Octal representation = 012
Hexadecimal representation = 0XA