Einführung
Das awk
command ist ein Linux-Tool und eine Programmiersprache, mit denen Benutzer Daten verarbeiten und manipulieren und formatierte Berichte erstellen können. Das Tool unterstützt verschiedene Operationen für die erweiterte Textverarbeitung und erleichtert das Ausdrücken komplexer Datenauswahlen.
In diesem Tutorial lernen Sie, was awk
Befehl funktioniert und wie man ihn benutzt.
Voraussetzungen
- Ein System, auf dem Linux ausgeführt wird.
- Zugriff auf ein Terminalfenster.
AWK-Befehlssyntax
Die Syntax für awk
Befehl ist:
awk [options] 'selection_criteria {action}' input-file > output-file
Die verfügbaren Optionen sind:
Option | Beschreibung |
---|---|
-F [separator] | Wird verwendet, um ein Dateitrennzeichen anzugeben. Das Standardtrennzeichen ist ein Leerzeichen. |
-f [filename] | Wird verwendet, um die Datei anzugeben, die das awk enthält Skript. Liest das awk Programmquelle aus der angegebenen Datei anstelle des ersten Befehlszeilenarguments. |
-v | Wird verwendet, um eine Variable zuzuweisen. |
Wie funktioniert der AWK-Befehl?
Das awk
Der Hauptzweck des Befehls besteht darin, Informationen abzurufen und Text zu bearbeiten einfach unter Linux auszuführen. Der Befehl scannt eine Reihe von Eingabezeilen der Reihe nach und sucht nach Zeilen, die den vom Benutzer angegebenen Mustern entsprechen.
Für jedes Muster können Benutzer eine Aktion angeben, die für jede Zeile ausgeführt werden soll, die mit dem angegebenen Muster übereinstimmt. Also mit awk
können Benutzer komplexe Protokolldateien einfach verarbeiten und einen lesbaren Bericht ausgeben.
AWK-Operationen
awk
ermöglicht es Benutzern, verschiedene Operationen an einer Eingabedatei oder einem Text auszuführen. Einige der verfügbaren Operationen sind:
- Scannen Sie eine Datei Zeile für Zeile.
- Teilen Sie die Eingabezeile/Datei in Felder auf.
- Vergleichen Sie die Eingabezeile oder -felder mit dem/den angegebenen Muster(n).
- Führen Sie verschiedene Aktionen auf den übereinstimmenden Linien durch.
- Ausgabezeilen formatieren.
- Arithmetische und Zeichenfolgenoperationen ausführen.
- Verwenden Sie Kontrollfluss und Schleifen bei der Ausgabe.
- Transformieren Sie die Dateien und Daten gemäß einer vorgegebenen Struktur.
- Formatierte Berichte erstellen.
AWK-Anweisungen
Der Befehl stellt grundlegende Ablaufsteuerungsanweisungen bereit (if-else
, while
, for
, break
) und ermöglicht es Benutzern auch, Anweisungen mit geschweiften Klammern {}
zu gruppieren .
- if-else
Der if-else
-Anweisung funktioniert, indem sie die in Klammern angegebene Bedingung und, wenn die Bedingung wahr ist, die Anweisung nach if
auswertet Anweisung ausgeführt wird. Das else
Teil ist optional.
Zum Beispiel:
awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt
Die Ausgabe zeigt die Zeilen, in denen Duplikate vorhanden sind, und besagt Keine Duplikate wenn es keine doppelten Antworten in der Zeile gibt.
- während
Das while
Die Anweisung führt eine Zielanweisung wiederholt aus, solange die angegebene Bedingung wahr ist. Das bedeutet, dass es wie in der Programmiersprache C funktioniert. Wenn die Bedingung wahr ist, wird der Rumpf der Schleife ausgeführt. Wenn die Bedingung falsch ist, awk
fährt mit der Ausführung fort.
Beispielsweise weist die folgende Anweisung awk
an um alle Eingabefelder einzeln pro Zeile zu drucken:
awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt
- für
Der for
-Anweisung funktioniert auch wie die von C und ermöglicht es Benutzern, eine Schleife zu erstellen, die eine bestimmte Anzahl von Malen ausgeführt werden muss.
Zum Beispiel:
awk 'BEGIN{for(i=1; i<=10; i++) print "The square of", i, "is", i*i;}'
Die obige Anweisung erhöht den Wert von i
um eins bis zehn erreicht und das Quadrat von i
berechnet jedes Mal.
- Pause
Die break
-Anweisung verlässt sofort ein einschließendes while
oder for
. Um mit der nächsten Iteration zu beginnen, verwenden Sie continue
Aussage.
Der next
-Anweisung weist awk
an um zum nächsten Datensatz zu springen und von oben nach Mustern zu suchen. Der exit
-Anweisung weist awk
an dass die Eingabe beendet ist.
Es folgt ein Beispiel für break
Aussage:
awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'
Der obige Befehl unterbricht die Schleife nach 5 Iterationen.
AWK-Muster
Einfügen eines Musters vor einer Aktion in awk
fungiert als Selektor . Der Selektor bestimmt, ob eine Aktion ausgeführt wird oder nicht. Die folgenden Ausdrücke können als Muster dienen:
- Reguläre Ausdrücke.
- Arithmetische relationale Ausdrücke.
- Ausdrücke mit Zeichenfolgenwerten.
- Beliebige boolesche Kombinationen der obigen Ausdrücke.
In den folgenden Abschnitten werden die oben genannten Ausdrücke und ihre Verwendung erklärt.
Muster für reguläre Ausdrücke
Reguläre Ausdrucksmuster sind die einfachste Form von Ausdrücken, die eine Zeichenfolge enthalten, die in Schrägstriche eingeschlossen ist. Es kann eine Folge von Buchstaben, Zahlen oder eine Kombination aus beidem sein.
Im folgenden Beispiel gibt das Programm alle Zeilen aus, die mit „A“ beginnen. Wenn die angegebene Zeichenkette Teil eines größeren Wortes ist, wird sie ebenfalls gedruckt.
awk '$1 ~ /^A/ {print $0}' employees.txt
Relationale Ausdrucksmuster
Eine andere Art von awk
Muster sind relationale Ausdrucksmuster. Die relationalen Ausdrucksmuster beinhalten die Verwendung eines der folgenden relationalen Operatoren:<, <=, ==, !=,>= und > .
Es folgt ein Beispiel für ein awk
relationaler Ausdruck:
awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'
Bereichsmuster
Ein Bereichsmuster ist ein Muster, das aus zwei Mustern besteht durch ein Komma getrennt. Bereichsmuster führen die angegebene Aktion für jede Zeile zwischen dem Auftreten von Muster eins und Muster zwei aus.
Zum Beispiel:
awk '/clerk/, /manager/ {print $1, $2}' employees.txt
Das obige Muster weist awk
an um alle Zeilen der Eingabe auszudrucken, die die Schlüsselwörter "clerk" und "manager" enthalten.
Spezielle Ausdrucksmuster
Spezielle Ausdrucksmuster umfassen BEGIN
und END
die Programminitialisierung und Programmende bezeichnen. Der BEGIN
Muster entspricht dem Beginn der Eingabe, bevor der erste Datensatz verarbeitet wird. Das END
Muster entspricht dem Ende der Eingabe, nachdem der letzte Datensatz verarbeitet wurde.
Beispielsweise können Sie awk
anweisen um eine Meldung zu Beginn und am Ende des Prozesses anzuzeigen:
awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt
Kombinieren von Mustern
Das awk
Mit dem Befehl können Benutzer zwei oder mehr Muster mithilfe logischer Operatoren kombinieren. Die kombinierten Muster können jede boolesche Kombination von Mustern sein. Die logischen Operatoren zum Kombinieren von Mustern sind:
||
(oder)&&
(und)!
(nicht)
Zum Beispiel:
awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt
Die Ausgabe gibt das erste und zweite Feld der Datensätze aus, deren drittes Feld größer als zehn und deren viertes Feld kleiner als 20 ist.
AWK-Variablen
Das awk
Der Befehl verfügt über integrierte Feldvariablen, die die Eingabedatei in separate Teile aufteilen, die als Felder bezeichnet werden . Das awk
weist jedem Datenfeld folgende Variablen zu:
$0
. Wird verwendet, um die gesamte Zeile anzugeben.$1
. Gibt das erste Feld an.$2
. Gibt das zweite Feld an.- usw.
Andere verfügbare integrierte awk
Variablen sind:
NR
. Zählt die Anzahl der Eingabedatensätze (normalerweise Zeilen). Dasawk
Der Befehl führt die Muster-/Aktionsanweisungen einmal für jeden Datensatz in einer Datei aus.
Zum Beispiel:
awk '{print NR,$0}' employees.txt
Der Befehl zeigt die Zeilennummer in der Ausgabe an.
NF
. Zählt die Anzahl der Felder im aktuellen Eingabedatensatz und zeigt das letzte Feld der Datei an.
Zum Beispiel:
awk '{print $NF}' employees.txt
FS
. Enthält das Zeichen, das zum Teilen von Feldern in der Eingabezeile verwendet wird. Das Standardtrennzeichen ist Leerzeichen, aber Sie könnenFS
verwenden um das Trennzeichen einem anderen Zeichen neu zuzuweisen (normalerweise inBEGIN
).
Beispielsweise können Sie etc/passwd erstellen Datei (Benutzerliste) besser lesbar, indem Sie das Trennzeichen von einem Doppelpunkt (:
) zu einem Bindestrich (/
) und drucke auch das Feldtrennzeichen aus:
awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd
RS
. Speichert das aktuelle Datensatztrennzeichen. Die Standardeingabezeile ist der Eingabedatensatz, wodurch ein Zeilenumbruch zum standardmäßigen Datensatztrennzeichen wird. Der Befehl ist nützlich, wenn die Eingabe eine durch Kommas getrennte Datei (CSV) ist.
Zum Beispiel:
awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt
OFS
. Speichert das Ausgabefeldtrennzeichen, das die Felder beim Drucken trennt. Das Standardtrennzeichen ist ein Leerzeichen. Wenn die gedruckte Datei mehrere durch Kommas getrennte Parameter enthält, wird derOFS
Der Wert wird zwischen jedem Parameter gedruckt.
Zum Beispiel:
awk 'OFS=" works as " {print $1,$3}' employees.txt
AWK-Aktionen
Das awk
Werkzeug folgt Regeln, die Muster-Aktions-Paare enthalten. Aktionen bestehen aus Anweisungen in geschweiften Klammern {}
die Ausdrücke, Steueranweisungen, zusammengesetzte Anweisungen, Eingabe- und Ausgabeanweisungen und Löschanweisungen enthalten. Diese Anweisungen werden in den Abschnitten oben beschrieben.
Erstellen Sie ein awk
Skript mit der folgenden Syntax:
awk '{action}'
Zum Beispiel:
awk '{print "How to use the awk command"}'
Dieser einfache Befehl weist awk
an um die angegebene Zeichenfolge jedes Mal auszugeben, wenn Sie den Befehl ausführen. Beenden Sie das Programm mit Strg+D .
Verwendung des AWK-Befehls - Beispiele
Abgesehen von der Manipulation von Daten und der Erzeugung formatierter Ausgaben, awk
hat andere Verwendungen, da es eine Skriptsprache und nicht nur ein Textverarbeitungsbefehl ist. Dieser Abschnitt erläutert alternative Anwendungsfälle für awk
.
- Berechnungen . Das
awk
Mit dem Befehl können Sie arithmetische Berechnungen durchführen. Zum Beispiel:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'
In diesem Beispiel leiten wir in den df-Befehl und verwenden die im Bericht generierten Informationen, um den verfügbaren Gesamtspeicher zu berechnen, der von den gemounteten Dateisystemen verwendet wird, die nur /dev enthalten und /loop im Namen.
Der erstellte Bericht zeigt die Speichersumme von /dev und /loop Dateisysteme in den Spalten zwei und drei im df
Ausgabe.
- Filtern . Das
awk
Mit dem Befehl können Sie die Ausgabe filtern, indem Sie die Länge der Zeilen begrenzen. Zum Beispiel:
awk 'length($0) > 8' /etc/shells
In diesem Beispiel haben wir /etc/shells ausgeführt Systemdatei durch awk
und filterte die Ausgabe, um nur die Zeilen mit mehr als 8 Zeichen zu enthalten.
- Überwachung . Überprüfen Sie, ob ein bestimmter Prozess unter Linux ausgeführt wird, indem Sie in
ps
weiterleiten Befehl. Zum Beispiel:
ps -ef | awk '{ if($NF == "clipboard") print $0}'
Die Ausgabe gibt eine Liste aller Prozesse aus, die auf Ihrem Computer ausgeführt werden, wobei das letzte Feld dem angegebenen Muster entspricht.
- Zählen . Sie können
awk
verwenden um die Anzahl der Zeichen in einer Zeile zu zählen und die im Ergebnis gedruckte Zahl zu erhalten. Zum Beispiel:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt