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