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

gawk Linux-Befehl mit Beispielen

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:

  1. Ordnungszahlen.
  2. Vornamen.
  3. Nachnamen.
  4. 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.


Linux
  1. Sortierbefehl in Linux mit Beispielen

  2. chattr-Befehl unter Linux mit Beispielen

  3. JQ-Befehl in Linux mit Beispielen

  4. ln-Befehlsbeispiele in Linux

  5. file Befehlsbeispiele in Linux

Verwenden des Cat-Befehls unter Linux mit Beispielen

Linux-WC-Befehl mit Beispielen

Linux-IP-Befehl mit Beispielen

Verwendung des Linux-mv-Befehls mit Beispielen

Linux-Mount-Befehl mit Beispielen

Linux-make-Befehl mit Beispielen