Einführung
Der gawk
command ist die GNU-Version von awk. Gawk ist ein leistungsstarkes Tool zur Textverarbeitung und Datenbearbeitung mit vielen Funktionen und praktischen Anwendungen.
In diesem Handbuch erfahren Sie, wie Sie Linux gawk
verwenden Befehl mit Beispielen.
Voraussetzungen
- Ein System, auf dem Linux ausgeführt wird.
- Zugang zum Terminal.
- Eine Textdatei. Dieses Tutorial verwendet die Datei people als Beispiel.
gawk-Linux-Befehlssyntax
Die grundlegenden gawk
Syntax sieht so aus:
gawk [options] [actions/filters] input_file
Der Befehl kann nicht ohne Argumente ausgeführt werden. Die Optionen sind nicht obligatorisch, aber für gawk
Um eine Ausgabe zu erzeugen, sollte mindestens eine Aktion zugewiesen werden. Aktionen und Filter sind verschiedene Unterbefehle und Auswahlkriterien, die gawk
aktivieren um Daten aus der Eingabedatei zu manipulieren.
Hinweis :Schließen Sie Optionen und Aktionen in einfache Anführungszeichen ein.
gawk-Optionen
Die gawk
Der Befehl ist dank seiner zahlreichen Argumente ein vielseitiges Werkzeug. Mit gawk
die GNU-Implementierung von awk
ist , lange Optionen im GNU-Stil sind verfügbar. Jede lange Option hat eine entsprechende kurze.
Allgemeine Optionen werden unten dargestellt:
Option | Beschreibung |
---|---|
-f program-file , --file program-file | Liest Befehle aus einer Datei, die als Skript dient, anstelle des ersten Arguments im Terminal. |
-F fs , --field-separator fs | Verwendet die vordefinierte Variable fs als Eingabefeld-Trennzeichen. |
-v var=val , --assign var=val | Weist der Variablen einen Wert zu, bevor ein Skript ausgeführt wird. |
-b , --characters-as-bytes | Behandelt alle Daten als Single-Byte-Zeichen. |
-c , --traditional | Führt gawk aus im Kompatibilitätsmodus. |
-C , --copyright | Zeigt die GNU-Copyright-Meldung an. |
-d[file] , --dump-variables[=file] | Zeigt eine Liste von Variablen, ihren Typen und Werten. |
-e program-text , --source program-text | Erlaubt das Mischen von Bibliotheksfunktionen und Quellcode. |
-E file , --exec file | Schaltet die Zuweisung von Terminalvariablen aus. |
-L [value] , --lint[=value] | Gibt Warnmeldungen über Code aus, der nicht auf andere AWK-Implementierungen portierbar ist. |
-S , --sandbox | Läuft gawk aus im Sandbox-Modus. |
gawk eingebaute Variablen
Die gawk
command bietet mehrere eingebaute Variablen, die zum Speichern und Hinzufügen von Werten zum Befehl verwendet werden. Variablen werden vom Terminal aus manipuliert und wirken sich nur auf das Programm aus, wenn ein Benutzer ihnen einen Wert zuweist. Einige wichtige gawk
Eingebaute Variablen sind:
Variable | Beschreibung |
---|---|
ARGC | Zeigt die Anzahl der Terminalargumente. |
ARGIND | Zeigt den Index der ARGV-Datei an. |
ARGV | Präsentiert ein Array von Terminal-Argumenten. |
ERRNO | Enthält Zeichenfolgen, die einen Systemfehler beschreiben. |
FIELDWIDTHS | Zeigt eine durch Leerzeichen getrennte Liste der Feldbreiten an. |
FILENAME | Druckt den Namen der Eingabedatei. |
FNR | Zeigt die Nummer des eingegebenen Datensatzes. |
FS | Repräsentiert das Eingabefeld-Trennzeichen. |
IGNORECASE | Schaltet die Suche mit Berücksichtigung der Groß-/Kleinschreibung ein oder aus. |
NF | Druckt die Feldanzahl der Eingabedatei. |
NR | Druckt die aktuelle Zeilenanzahl der Datei. |
OFS | Zeigt das Ausgabefeld-Trennzeichen an. |
ORS | Zeigt das Ausgabe-Datensatztrennzeichen. |
RS | Druckt das Eingabe-Datensatztrennzeichen. |
RSTART | Repräsentiert den Index des ersten übereinstimmenden Zeichens. |
RLENGTH | Repräsentiert die übereinstimmende Zeichenfolgenlänge. |
gawk-Beispiele
Die Verwendung von gawk
Pattern-Matching- und Sprachverarbeitungsfunktionen sind umfangreich. Dieser Artikel zielt darauf ab, praktische Beispiele bereitzustellen, anhand derer Benutzer lernen, das Dienstprogramm gawk zu verwenden.
Wichtig: Der gawk
Beim Befehl wird zwischen Groß- und Kleinschreibung unterschieden. Verwenden Sie den IGNORECASE
Variable zum Ignorieren der Groß-/Kleinschreibung.
Dateien drucken
Standardmäßig gawk
mit einem print
Argument zeigt jede Zeile aus der angegebenen Datei an. Führen Sie zum Beispiel den cat-Befehl für people aus Textdatei gibt Folgendes aus:
Der gawk
Befehl zeigt dasselbe Ergebnis an:
gawk '{print}' people
Spalte drucken
In Textdateien werden normalerweise Leerzeichen als Trennzeichen für Spalten verwendet. Die Menschen Datei besteht aus vier Spalten:
- Ordnungszahlen.
- Vornamen.
- Nachnamen.
- Geburtsjahr.
Verwenden Sie gawk
um nur eine bestimmte Spalte im Terminal anzuzeigen. Zum Beispiel:
gawk '{print $2}' people
Der Befehl druckt nur die zweite Spalte. Um mehrere Spalten zu drucken, wie Spalte eins (Ordnungszahlen) und Spalte zwei (Vornamen), führen Sie Folgendes aus:
gawk '{print $1, $2}' people
Der gawk
funktioniert auch ohne das Komma zwischen $1
und $2
. Es gibt jedoch keine Leerzeichen zwischen den Spalten in der Ausgabe:
gawk '{print $1 $2}' people
Spalten filtern
Die gawk
Der Befehl bietet zusätzliche Filteroptionen. Drucken Sie beispielsweise Zeilen mit dem Großbuchstaben O mit:
gawk '/O/ {print}' people
Um nur Zeilen anzuzeigen, die die Buchstaben O enthalten oder A , verwenden Sie Rohrleitungen:
gawk '/O|A/ {print}' people
Der Befehl gibt jede Zeile aus, die ein Wort mit einem großen O enthält oderA . Verwenden Sie andererseits das logische UND (&&
), um Zeilen anzuzeigen, die beide O enthalten und das Jahr 1995 :
gawk '/O/ && /1995/' people
Die Filter funktionieren auch mit Zahlen. Zeigen Sie beispielsweise nur Personen an, die in den 1990er Jahren geboren wurden mit:
gawk '/199*/ {print}' people
Die Ausgabe zeigt nur Zeilen, in denen die vierte Spalte den Wert 199 enthält .
Passen Sie die Ausgabe noch weiter an, indem Sie die zuvor genannten Optionen kombinieren. Drucken Sie beispielsweise nur die Vor- und Nachnamen von Personen, die 1995 geboren wurden oder 2003 mit:
gawk '/1995|2003/ {print $2, $3}' people
Der Befehl druckt die Spalten zwei und drei wie in {print $2, $3}
angegeben Teil. Die Ausgabe zeigt nur Zeilen mit den Zahlen 1995 und 2003 , obwohl Spalten mit diesen Zahlen ausgeblendet sind.
Der gawk
Mit dem Befehl können Benutzer auch alles außer den Zeilen drucken, die die angegebene Zeichenfolge mit dem logischen NOT enthalten (!
). Lassen Sie beispielsweise Zeilen weg, die die Zeichenfolge 19 enthalten in der Ausgabe:
gawk '!/19/' people
Zeilennummern hinzufügen
Die Menschen Datei enthält Zeilennummern in der ersten Spalte. Falls Benutzer an einer Datei ohne Zeilennummern arbeiten, gawk
zeigt Optionen zum Hinzufügen an.
Zum Beispiel die Menschen Datei enthält keine Ordnungszahlen:
Um Zeilennummern hinzuzufügen, führen Sie gawk
aus mit FNR
und next
:
gawk '{ print FNR, $0; next}' humans
Der Befehl fügt vor jeder Zeile eine Zeilennummer ein. Dasselbe Ergebnis wird mit NR
erzielt Variable:
gawk '{print NR, $0}' mobile.txt
Zeilenanzahl finden
Um die Gesamtzahl der Zeilen in der Datei zu zählen, verwenden Sie den END
-Anweisung und die NR
Variable mit gawk
:
gawk 'END { print NR }' people
Der Befehl liest jede Zeile. Einmal gawk
erreicht END
, gibt es den Wert von NR
aus - die die Gesamtzahl der Zeilen enthält. Ausführen desselben Befehls ohne END
-Anweisung gibt nur den Wert von NR
aus - die Anzahl der Zeilen:
Linien nach Länge filtern
Verwenden Sie die folgende Befehlsoption, um nur Zeilen mit mehr als 20 Zeichen zu drucken:
gawk 'length>20' people
Es funktioniert auch mit mehreren Argumenten. Zeigen Sie beispielsweise Zeilen an, die länger als 17 sind aber kürzer als 20 Zeichen:
gawk 'length<20 && length>17' people
Um Zeilen anzuzeigen, die genau 20 Zeichen lang sind, führen Sie Folgendes aus:
gawk 'length==20' people
Informationen basierend auf Bedingungen drucken
Die gawk
Der Befehl ermöglicht die Verwendung der if-else-Anweisungen. Zum Beispiel eine andere Möglichkeit, nur Personen herauszufiltern, die nach 1999 geboren wurden ist mit einer einfachen if-Anweisung:
gawk '{ if ($4>1999) print }' people
Die if-Anweisung setzt die Bedingung, dass Einträge in Spalte vier größer als 1999 sein müssen . Die Ausgabe zeigt nur Einträge, die die Bedingung erfüllen. Erweitern Sie den Befehl zu einer if-else-Anweisung, um Zeilen auszugeben, die die ursprüngliche Bedingung nicht erfüllen.
gawk '{if ($4>1999) print $0," ==>00s"; else print $0, "==>90s"}' people
Der Befehl enthält:
- If-Anweisung. Wenn die Bedingung erfüllt ist,
gawk
fügt eine Zeichenfolge "==>90s hinzu " in die Ausgabezeile. - Else-Anweisung. Falls die Zeile die Bedingung nicht erfüllt,
gawk
gibt diese Zeile trotzdem in der Ausgabe aus und fügt die "==>00s hinzu " string zur Ausgabe.
Kopfzeile hinzufügen
Genauso wie der END
-Anweisung ermöglicht es Benutzern, die Ausgabe am Ende der Datei, BEGIN
, zu ändern -Anweisung formatiert die Daten am Anfang.
Bei Verwendung mit awk
, der BEGIN
Abschnitte werden immer zuerst ausgeführt. Danach awk
führt die restlichen Zeilen aus. Eine Möglichkeit, den BEGIN
zu verwenden Anweisung besteht darin, der Ausgabe einen Header hinzuzufügen.
Führen Sie den folgenden Befehl aus, um einen Abschnitt über awk
hinzuzufügen Ausgabe:
gawk 'BEGIN {print "No/First&Last Name/Year of Birth"} {print $0}' people
Finde die längste Zeilenlänge
Kombinieren Sie vorherige Argumente mit dem if und END
Anweisungen, um die längste Schlange in den Personen zu finden Datei:
gawk '{ if (length($0) > max) max = length($0) } END { print max }' people
Finde die Anzahl der Felder
Der gawk
Mit dem Befehl NF
können Benutzer auch die Anzahl der Felder anzeigen Variable. Der einfachste Weg, die Anzahl der Felder anzuzeigen, gibt eine schwer lesbare Ausgabe aus:
gawk '{print NF}' people
Der Befehl gibt die Anzahl der Felder pro Zeile ohne weitere Informationen aus. Passen Sie den ursprünglichen Befehl an, um die Ausgabe anzupassen und für Menschen lesbarer zu machen:
gawk '{print NR, "-->", NF}' people
Der Befehl enthält jetzt:
- Der
NR
Variable, die jeder Ausgabezeile Zeilennummern hinzufügt. - Der
-->
Zeichenfolge, die die Zeilennummern von den Feldnummern trennt.
Eine andere Möglichkeit, Zeilen- und Feldnummern in den Personen anzuzeigen Datei soll Spalten mit NF
drucken . Beachten Sie, dass die Menschen Datei enthält Ordnungszahlen in Spalte eins. Daher die NR
Variable wird weggelassen:
gawk '{print $0, "-->", NF}' people
Um schließlich die Gesamtzahl der Felder zu drucken, führen Sie Folgendes aus:
gawk '{num_fields = num_fields + NF} END {print num_fields}' people
Die Datei hat zehn Zeilen und vier Spalten. Daher ist die Ausgabe korrekt.
Fazit
Nachdem Sie dieses Tutorial durchgearbeitet haben, wissen Sie, wie Sie gawk
verwenden für fortgeschrittene Textverarbeitung und Datenbearbeitung.
Erwägen Sie auch die Verwendung von grep, einem leistungsstarken Linux-Tool zum Suchen nach Zeichenfolgen, Wörtern und Mustern.