Awk ist eine mächtige Sprache zum Manipulieren und Verarbeiten von Textdateien. Dies ist besonders hilfreich, wenn die Zeilen in einer Textdatei im Datensatzformat vorliegen. d.h. Ein Datensatz, der mehrere Felder enthält, die durch ein Trennzeichen getrennt sind. Auch wenn die Eingabedatei nicht in einem Datensatzformat vorliegt, können Sie dennoch awk verwenden, um einige grundlegende Datei- und Datenverarbeitungen durchzuführen. Sie können mit awk auch Programmierlogik schreiben, selbst wenn keine Eingabedateien verarbeitet werden müssen.
Kurz gesagt, AWK ist eine mächtige Sprache, die sich für tägliche Routineaufgaben als nützlich erweisen kann.
Wenn Sie neu bei awk sind, beginnen Sie damit, dieses Awk-Einführungstutorial zu lesen, das Teil der Awk-Tutorial-Reihe ist.
Die Lernkurve bei AWK ist viel kleiner als die Lernkurve bei anderen Sprachen. Wenn Sie das C-Programm bereits kennen, werden Sie zu schätzen wissen, wie einfach und leicht es ist, AWK zu lernen.
AWK wurde ursprünglich von drei Entwicklern geschrieben – A. Aho, B. W. Kernighan und P. Weinberger. Der Name AWK stammt also von den Initialen dieser drei Entwickler.
Im Folgenden sind die drei Varianten von AWK aufgeführt:
1. Achso
AWK ist das ursprüngliche AWK, das von A. Aho, B. W. Kernighan und P. Weinberger geschrieben wurde.
2. Nawk
NAWK steht für „Neues AWK“. Dies ist die Awk-Version von AT&T.
3. Gawk
GAWK steht für „GNU AWK“. Alle Linux-Distributionen enthalten GAWK. Dies ist vollständig kompatibel mit AWK und NAWK.
Unter Linux ruft die Eingabe von entweder awk oder gawk das GAWK auf. awk ist auf Linux-Systemen wie unten gezeigt mit gawk verknüpft.
# ls -l /bin/awk /usr/bin/awk lrwxrwxrwx 1 root root 4 Jan 5 23:13 /bin/awk -> gawk lrwxrwxrwx 1 root root 14 Jan 5 23:13 /usr/bin/awk -> ../../bin/gawk
Die folgende Tabelle fasst die verschiedenen Funktionen zusammen, die in diesen Versionen verfügbar sind. Wie Sie unten sehen, ist gawk die Obermenge, die alle Funktionen des ursprünglichen awk und nawk enthält.
Awk gegen Nawk gegen Gawk
Laden Sie die Unterschiede zwischen Awk Vs Nawk Vs Gawk im PDF-Cheatsheet-Format herunter.
Die folgenden grundlegenden eingebauten Variablen FS, OFS, RS, ORS, NR, NF und FILENAME sind in allen Versionen von awk verfügbar.
Funktion | Beschreibung | AWK | NAWK | GAWK |
---|---|---|---|---|
FS | Trennzeichen für Eingabefelder | Ja | Ja | Ja |
OFS | Ausgabefeld-Trennzeichen | Ja | Ja | Ja |
RS | Datensatztrennzeichen | Ja | Ja | Ja |
ORS | Datensatztrennzeichen ausgeben | Ja | Ja | Ja |
NR | Nummer des Datensatzes | Ja | Ja | Ja |
NF | Anzahl der Felder in einem Datensatz | Ja | Ja | Ja |
DATEINAME | Enthält aktuelle Eingabedatei, die verarbeitet wird | Ja | Ja | Ja |
Alle folgenden Funktionen sind im ursprünglichen awk nicht verfügbar. Sie sind wie unten gezeigt in nawk und/oder gawk verfügbar.
Funktion | Beschreibung | NAWK | GAWK |
---|---|---|---|
FNR | Datei „Nummer des Datensatzes“ | Ja | Ja |
ARGC | Gesamtzahl oder Argumente, die an das awk-Skript übergeben wurden | Ja | Ja |
ARGV | Array, das alle awk-Skriptargumente enthält | Ja | Ja |
ARGIND | Index zu ARGV, um den aktuellen Dateinamen abzurufen | Ja | |
SUBSEP | Tiefgestelltes Trennzeichen für Array-Indizes | Ja | Ja |
RSTART | Match-Funktion setzt RSTART mit der Startposition von str1 in str2 | Ja | Ja |
RLÄNGE | Match-Funktion setzt RLENGTH mit der Länge von str1 | Ja | Ja |
OFMT | Awk verwendet dies, um zu entscheiden, wie Werte ausgegeben werden. Standard ist „%.6g“ | Ja | Ja |
UMGEBUNG | Array, das alle Umgebungsvariablen und -werte enthält | Ja | |
IGNORECASE | Standard ist 0. Wenn es auf 1 gesetzt ist, wird die Groß-/Kleinschreibung für String- und Reg-Ex-Vergleiche nicht beachtet. | Ja | |
FEHLER | Enthält Fehlermeldung einer E/A-Operation. z.B. bei Verwendung der Getline-Funktion. | Ja | |
BINMODE n | Stellen Sie den Binärmodus für E/A ein. n kann 1 (Eingabedateien), 2 (Ausgabedateien) oder 3 (alle Dateien) sein | Ja | |
CONVFMT | Das Format, das beim Konvertieren von Zahlen in Zeichenfolgen verwendet wird. | Ja | |
FELDBREITEN n | n ist eine durch Leerzeichen getrennte Zahl, die die Spaltenbreite angibt. Wenn dies verfügbar ist, verwendet gawk dies anstelle von FS. | Ja | |
LINT n | n kann eine Zahl sein. Wenn n eine Zahl ungleich Null ist (wahr angibt), zeigt gawk schwerwiegende, ungültige oder warnende Lint-Meldungen an (dasselbe wie bei der –lint-Befehlszeile) | Ja | |
TEXTDOMÄNE | Dies wird für die Internationalisierung verwendet. | Ja | |
sub(str1,str2,var) | In der Eingabezeichenfolge (var) wird str1 durch str2 ersetzt, und die Ausgabe wird wieder in var gespeichert | Ja | Ja |
gsub(str1,str2,var) | Dasselbe wie sub, aber global. Es führt mehrere Ersetzungen an derselben Eingabezeichenfolge (var) durch. | Ja | Ja |
match(str1,str2) | Gibt eine positive Zahl zurück, wenn str1 in str2 vorhanden ist. | Ja | Ja |
getline Nächste Zeile aus einer anderen Eingabedatei lesen. Setzt $0, NF | Ja | Ja | |
getline var Nächste Zeile aus einer anderen Eingabedatei lesen und in Variable (var) speichern | Ja | Ja | |
toupper(str) | Konvertiert str in Großbuchstaben | Ja | |
tolower(str) | Konvertiert str in Kleinbuchstaben | Ja | |
|& | Zwei-Wege-Kommunikation zwischen awk-Befehl und externem Prozess | Ja | |
systime() | Aktuelle Zeit in Epochenzeit. Kombinieren Sie mit strftime. z.B. print strftime(“%c”,systime()) | Ja |