GNU/Linux >> LINUX-Kenntnisse >  >> Linux

AWK gegen NAWK gegen GAWK

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

Linux
  1. Verwenden Sie awk, um die Buchstabenhäufigkeit zu berechnen

  2. Ein Gawk-Skript zum Konvertieren von intelligenten Anführungszeichen

  3. Daten extrahieren und anzeigen mit awk

  4. Eine Anleitung für Anfänger zum gawk

  5. Externe Variable in Awk?

AWK-Befehl in Linux mit Beispielen

Awk-Befehl unter Linux

Linux-awk-Befehl mit 10 Beispielen

AWK-Befehl unter Linux/Unix

4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )

Flatpak vs. Snap vs. AppImage