Der AWK-Befehl ist ein leistungsstarkes und vielseitiges Werkzeug zur Verarbeitung und Transformation von Textdaten unter Linux. Ob Sie Informationen extrahieren, Zeilen filtern, die Ausgabe neu formatieren oder Berechnungen durchführen möchten – AWK vereinfacht Ihre Arbeit mit nur wenigen Codezeilen. In diesem Artikel erfahren Sie, wie Sie den AWK-Befehl zur Textmanipulation unter Linux verwenden.
Was ist der AWK-Befehl?

AWK ist eine interpretierte Programmiersprache, die im Linux-Terminal ausgeführt wird. Ihr Name leitet sich von den Initialen ihrer Entwickler ab: Alfred Aho, Peter Weinberger und Brian Kernighan. AWK wurde ursprünglich für die Verarbeitung von Dateien mit durch Trennzeichen getrennten Feldern entwickelt, wie beispielsweise CSV- oder /etc/passwd-Dateien. AWK kann jedoch auch komplexere Textdateien wie HTML- oder XML-Dateien verarbeiten. AWK ist keine objektorientierte Programmiersprache , ermöglicht aber die Definition lokaler und globaler Funktionen und Variablen. Zudem verfügt sie über Kontrollstrukturen wie Schleifen und bedingte Anweisungen.
Die allgemeine Syntax des AWK-Befehls lautet wie folgt:
awk [Optionen] 'Programm' [Dateien]
Das Programm ist eine Folge von Anweisungen, die Suchmuster für jede Zeile der Datei und Aktionen bei deren Auffinden definieren. Optionen ermöglichen die Anpassung des Verhaltens des AWK-Befehls, beispielsweise die Wahl des Feldtrennzeichens oder des Ausgabeformats.
Wie kann ich Text mit dem AWK-Befehl ausgeben?

Mit dem AWK-Befehl kann eine Nachricht im Terminal ausgegeben werden, basierend auf einem Muster im Text. Führt man den AWK-Befehl ohne Muster, also nur mit dem Befehl `print`, aus, gibt AWK die Nachricht bei jedem Drücken der Eingabetaste aus.
Wenn Sie beispielsweise Folgendes eingeben:
awk '{print "Hello"}'
Und wenn Sie mehrmals die Eingabetaste drücken, erhalten Sie Folgendes:
Hallo, hallo, hallo!
Um den AWK-Befehl zu beenden, können Sie Strg+C drücken.
Um den Inhalt einer Datei mit dem AWK-Befehl auszugeben, können Sie das spezielle Muster `BEGIN` , das vor dem Einlesen der Datei ausgeführt wird, und das spezielle Muster `END` , das nach dem Einlesen der Datei ausgeführt wird. Beispiel: Angenommen, Sie haben eine Datei namens `test.txt` , die Folgendes enthält:
Dies ist ein Test. AWK ist ein großartiges Werkzeug. Linux ist das beste Betriebssystem
Sie können den Inhalt der Datei mit folgendem Befehl ausdrucken:
awk 'BEGIN {print "Hier ist der Inhalt der Datei test.txt:"} {print} END {print "Ende der Datei"}' test.txt
Daraus ergibt sich:
Hier ist der Inhalt der Datei test.txt: Dies ist ein Test. AWK ist ein großartiges Werkzeug. Linux ist das beste Betriebssystem. Ende der Datei
Befehl `{print}` ohne Argumente gibt die gesamte Zeile aus. Sie können auch ein bestimmtes Feld mithilfe der Variablen `$n` , wobei `n` die Feldnummer ist. Standardmäßig werden Felder durch Leerzeichen oder Tabulatoren getrennt; Sie können das Trennzeichen jedoch mit der `-F` .
Wenn Sie beispielsweise das erste und dritte Feld der /etc/passwd , die durch Doppelpunkte (: :) , können Sie folgenden Befehl verwenden:
awk -F: '{print $1 " " $3}' /etc/passwd
Das ergibt etwa Folgendes:
root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 lp 7 mail 8 news 9 uucp 10 proxy 13 www-data 33 ...
Sie können auch arithmetische Ausdrücke oder Zeichenketten mithilfe des AWK-Befehls ausgeben. Wenn Sie beispielsweise das Quadrat des zweiten Feldes in der Datei test.txt , können Sie den folgenden Befehl verwenden:
awk '{print $2^2}' test.txt
Daraus ergibt sich:
ist 16 ist
test.txt auszugeben , können Sie die spezielle Variable NR , die die aktuelle Zeilennummer enthält. Beispielsweise können Sie folgenden Befehl verwenden:
awk 'END {print NR}' test.txt
Daraus ergibt sich:
3
Wie filtert man Text mithilfe des AWK-Befehls?

Mit dem AWK-Befehl lassen sich Texte anhand von Mustern oder Bedingungen filtern. Wird vor einer Aktion ein Muster angegeben, führt AWK die Aktion nur aus, wenn das Muster in der Zeile gefunden wird. Das Muster kann ein regulärer Ausdruck, ein Vergleich, eine logische Operation oder eine Kombination davon sein.
Wenn Sie beispielsweise die Zeilen aus der test.txt , die das Wort Linux , können Sie folgenden Befehl verwenden:
awk '/Linux/ {print}' test.txt
Daraus ergibt sich:
Linux ist das beste Betriebssystem
/etc/passwd auszugeben , deren UID größer als 1000 ist, können Sie folgenden Befehl verwenden:
awk -F: '$3 > 1000 {print}' /etc/passwd
Das ergibt etwa Folgendes:
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin tss:x:131:142:TPM Software Stack,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...
Sie können auch die logischen Operatoren && (und), || (oder) und ! (nicht) verwenden, um Muster zu kombinieren. Wenn Sie beispielsweise die Zeilen in der /etc/passwd , deren UID größer als 1000 ist und die eine andere Shell als /usr/sbin/nologin verwenden, können Sie den folgenden Befehl verwenden:
awk -F: '$3 > 1000 && $7 != "/usr/sbin/nologin" {print}' /etc/passwd
Kopie
Das ergibt etwa Folgendes:
tss:x:131:142:TPM Software Stack,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...
Wie kann man Text mithilfe des AWK-Befehls bearbeiten?

Mit dem AWK-Befehl lassen sich Texte mithilfe von integrierten Funktionen oder speziellen Variablen bearbeiten. Um beispielsweise in der Datei test.txt , verwenden Sie die `gsub` , die alle Vorkommen einer Zeichenkette durch eine andere ersetzt. Alternativ können Sie die OFS- `<outputfields>` verwenden, die das Ausgabefeldtrennzeichen definiert. Beispielsweise können Sie folgenden Befehl verwenden:
awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' test.txt
Daraus ergibt sich:
30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51
Im AWK-Befehlshandbuch finden Sie Informationen zu weiteren verfügbaren Funktionen und Variablen.
Wie verwendet man die for-Schleife mit dem AWK-Befehl?
Mit dem AWK-Befehl lassen sich for-Schleifen über die Felder oder Zeilen einer Datei ausführen. Die Syntax der for-Schleife lautet wie folgt:
für (Variable im Array) Aktion
Dabei Variable der Name der Variablen, die nacheinander die Werte aus dem Array , und Aktion ist die Aktion, die bei jeder Iteration ausgeführt werden soll.
Wenn Sie beispielsweise die Felder einer Datei in umgekehrter Reihenfolge ausgeben möchten, können Sie eine for-Schleife mit der speziellen Variable NF , die die Anzahl der Felder in der aktuellen Zeile enthält. Beispiel: Angenommen, Sie haben eine Datei namens test.txt, die Folgendes enthält:
Dies ist ein Test. AWK ist ein großartiges Werkzeug. Linux ist das beste Betriebssystem
Sie können die Reihenfolge der Felder mit folgendem Befehl umkehren:
awk '{for (i=NF; i>0; i--) print $i}' test.txt
Daraus ergibt sich:
Ein Test ist dieses beeindruckende Tool; ein anderer ist AWK; das beste Betriebssystem ist Linux

Sie können die for-Schleife auch verwenden, um die Zeilen einer Datei mit der speziellen Variable FNR , die die Zeilennummer der aktuellen Datei enthält. Wenn Sie beispielsweise die geradzahligen Zeilen der Datei test.txt , können Sie den folgenden Befehl verwenden:
awk 'FNR%2==0 {print FNR}' test.txt
Daraus ergibt sich:
2
4
Wie führe ich ein AWK-Skript aus?
Um ein AWK-Skript auszuführen, können Sie es in einer Datei mit der .awk chmod +x Ausführungsrechte erteilen . Anschließend können Sie das Skript mit dem Befehl ./script_name.awk [Dateien] .
Wenn Sie beispielsweise ein Skript namens hello.awk , das Folgendes enthält:
#!/usr/bin/awk -f BEGIN {print "Hello"}
Sie können das Skript mit folgendem Befehl ausführen:
./hello.awk
Daraus ergibt sich:
Guten Morgen
Wie übergebe ich Argumente an ein AWK-Skript?

Um Argumente an ein AWK-Skript zu übergeben, können Sie zwei Methoden verwenden:
- Die erste Methode verwendet die
`-v`im FormatVariable=Wert. Wenn Sie beispielsweise zwei Argumente namens`var1`und`var2`an Ihr`hello.awk`, können Sie folgenden Befehl verwenden:
awk -v var1=hello -v var2=world -f hello.awk
In Ihrem hello.awk können Sie über die Variablen $var1 und $var2 . Wenn Ihr Skript beispielsweise Folgendes enthält:
#!/usr/bin/awk -f BEGIN {print $var1 " " $var2}
Sie erhalten:
Hallo Welt
- Die zweite Methode verwendet das spezielle
ARGV-, das die an das Skript übergebenen Argumente enthält. Um beispielsweise zwei unbenannte Argumente an Ihrhello.awk, können Sie folgenden Befehl verwenden:
awk -f hello.awk hello world
In Ihrem hello.awk können Sie über die Indizes ARGV[1] und ARGV[2] . Wenn Ihr Skript beispielsweise Folgendes enthält:
#!/usr/bin/awk -f BEGIN {print ARGV[1] " " ARGV[2]}
Sie erhalten:
Hallo Welt
FAQs
Worin besteht der Unterschied zwischen AWK und GAWK?
GAWK ist eine GNU-Implementierung von AWK, die der ursprünglichen Sprache zusätzliche Funktionen hinzufügt, wie z. B. die Unterstützung für erweiterte reguläre Ausdrücke, mehrdimensionale Arrays oder vordefinierte Funktionen.
Wie kann ich ein AWK-Skript debuggen?
Option `-W` zusammen mit dem `lint` . Dadurch werden Warnmeldungen zu potenziellen Fehlern im Skript angezeigt. Alternativ können Sie die `-W` zusammen mit dem `dump-variables` . Dieser gibt die Werte der Variablen am Ende der Skriptausführung aus.
Wie verwende ich den AWK-Befehl zum Sortieren von Daten?
`sort` verwenden . Wenn Sie beispielsweise die Benutzer in der `/etc/passwd` nach ihrer UID sortieren möchten, können Sie den folgenden Befehl verwenden:
awk -F: '{print $1, $3}' /etc/passwd | sort -n -k2
Durch die Kombination von AWK mit anderen Befehlen (hier sort ) können Sie die Darstellung und Organisation von Daten deutlich verbessern.
Wie kann ich mit dem AWK-Befehl die Anzahl der Wörter in einer Datei ausgeben?
Um die Anzahl der Wörter in einer Datei mit dem AWK-Befehl auszugeben, können Sie die spezielle Variable ` NF` , die die Anzahl der Felder in der aktuellen Zeile enthält, und die spezielle Variable ` NR` , die die aktuelle Zeilennummer enthält. Mit einer for-Schleife können Sie die Anzahl der Wörter in jeder Zeile zählen und sie zu einer Variable namens ` total` . Mit dem speziellen Muster ` END` können Sie das Endergebnis ausgeben. Beispiel: Wenn Sie eine Datei namens `test.txt` , die Folgendes enthält:
Dies ist ein Test. AWK ist ein großartiges Werkzeug. Linux ist das beste Betriebssystem
Sie können die Anzahl der Wörter in der Datei mit folgendem Befehl ausgeben:
awk '{for (i=1; i<=NF; i++) total++} END {print total}' test.txt
Daraus ergibt sich:
9
Wie verwende ich den AWK-Befehl, um Daten aus einer CSV-Datei zu extrahieren?
Um mit dem AWK-Befehl Daten aus einer CSV-Datei (Comma-Separated Values) zu extrahieren, können Sie die -F , um das Feldtrennzeichen auf ein Komma festzulegen. Beispiel: Wenn Sie eine Datei namens test.csv , die Folgendes enthält:
Name, Vorname, Alter: Alice Dupont, 25; Bob Martin, 32; Charles Durand, 28
Sie können den Namen und das Alter von Personen mit folgendem Befehl extrahieren:
awk -F"," '{print $1 " " $3}' test.csv
Daraus ergibt sich:
Name, Alter: Alice 25, Bob 32, Charles 28
Wie filtert man Daten mithilfe des AWK-Befehls?
Mit dem AWK-Befehl können Sie Daten anhand von Mustern filtern. Diese Muster sind reguläre Ausdrücke oder logische Bedingungen. Muster werden vor den Aktionen platziert und durch geschweifte Klammern getrennt. Wenn Sie beispielsweise die Zeilen in der Datei test.csv Alice enthalten , können Sie folgendes Muster verwenden:
awk -F"," '/Alice/ {print}' test.csv
Daraus ergibt sich:
Alice, Dupont, 25
test.csv anzeigen möchten, die älter als 30 Jahre sind, können Sie folgendes Muster verwenden:
awk -F"," '$3 > 30 {print}' test.csv
Daraus ergibt sich:
Bob, Martin, 32
Sie können mehrere Muster mithilfe der logischen Operatoren && (und), || (oder) und ! test.csv anzeigen möchten, deren Name mit C oder deren Alter unter 10 Jahren liegt, können Sie folgendes Muster verwenden:
awk -F"," '($1 ~ /^C/) || ($3 < 10) {print}' test.csv
Daraus ergibt sich:
CAMILLE,M,7 CLARA,F,11 CLEMENT,M,7
Wie berechnet man Statistiken mithilfe des AWK-Befehls?
Mit dem AWK-Befehl lassen sich Statistiken zu numerischen Daten in einer Datei berechnen, beispielsweise Summe, Durchschnitt, Minimum oder Maximum. Dazu werden einfach Variablen verwendet, um die Zwischenwerte zu speichern und diese zeilenweise zu aktualisieren. Mit dem speziellen END- kann das Endergebnis angezeigt werden. Um beispielsweise die Summe und den Durchschnitt der Altersangaben in der Datei test.csv , kann folgendes Programm verwendet werden:
awk -F"," 'NR>1 {sum+=$3; count++} END {print "Summe: " sum; print 'Durchschnitt: 'sum/count}' test.csv
Daraus ergibt sich:
Gesamt: 110 Durchschnitt: 18,3333
Erläuterung:
- Option
-F","wird das Feldtrennzeichen als Komma definiert. - Wir verwenden die Bedingung
NR>1,um die erste Zeile der Datei zu ignorieren, die die Spaltennamen enthält. - Wir verwenden die Variablen
sumundcount, um die Summe und die Anzahl der Altersangaben zu berechnen. Mit dem Operator+=erhöhen wir die Variablen um den Wert des dritten Feldes ($3). -
END-Muster dient Operator/, um den Durchschnitt zu berechnen, indem die Summe durch die Zahl geteilt wird.
Um das Mindest- und Höchstalter in der test.csv , können Sie folgendes Programm verwenden:
awk -F"," 'NR>1 {if (min=="") min=max=$3; if ($3<min) min=$3; if ($3> max) max=$3} END {print "Min: " min; print 'Max: 'max}' test.csv
Daraus ergibt sich:
Mindestens: 6, Maximal: 32
Erläuterung:
- Option
-F","wird das Feldtrennzeichen als Komma definiert. - Wir verwenden die Bedingung
NR>1,um die erste Zeile der Datei zu ignorieren, die die Spaltennamen enthält. - Wir verwenden die Variablen
`min`und`max`, um das Mindest- und Höchstalter zu speichern. Falls diese Variablen leer sind, initialisieren wir sie mit dem Wert des dritten Feldes (`$3`).Mithilfeder Operatoren`<`und`>`vergleichen wir die Werte und aktualisieren die Variablen gegebenenfalls. - Das
END-zur Anzeige des Endergebnisses.
Abschluss
Der AWK-Befehl ist ein unverzichtbares Werkzeug zur Textbearbeitung unter Linux. Er ermöglicht komplexe Aufgaben mit nur wenigen Codezeilen, wie das Extrahieren, Filtern, Modifizieren oder Berechnen von Daten. Dank seiner Muster, Aktionen, Funktionen und Variablen bietet er große Flexibilität. Er lässt sich mit anderen Linux-Befehlen kombinieren, um seine Möglichkeiten zu erweitern. Beispielsweise kann man Windows Befehl `echo` , um eine Nachricht oder eine Variable auf dem Bildschirm anzuzeigen. Weitere Informationen zum AWK-Befehl finden Sie im Handbuch oder in den zahlreichen Online-Tutorials.


