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

AWK-Befehl in Linux mit Beispielen

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). Das awk 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önnen FS verwenden um das Trennzeichen einem anderen Zeichen neu zuzuweisen (normalerweise in BEGIN ).

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 der OFS 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

Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux-Sortierungsbefehl mit Beispielen

  3. Linux Tee-Befehl mit Beispielen

  4. Linux-Kopfbefehl mit Beispielen

  5. JQ-Befehl in Linux mit Beispielen

Linux-Uhrbefehl mit Beispielen

Wartebefehl in Linux mit Beispielen

Linux-Exportbefehl mit Beispielen

Neustartbefehl unter Linux mit Beispielen

Linux-awk-Befehl mit 10 Beispielen

Linux-IP-Befehl mit Beispielen