AWK-Befehl unter Linux und Unix: Syntax, Beispiele und Anwendungsfälle

Der AWK-Befehl ist ein Werkzeug zur Textverarbeitung, das auf Linux- und Unix-Systemen verfügbar ist. AWK verarbeitet Eingaben zeilenweise, zerlegt jede Zeile in einzelne Felder und wendet von dir festgelegte Muster-Aktions-Regeln an, um Daten zu filtern, zu verändern oder auszuwerten. Der Name AWK geht auf seine Entwickler Alfred Aho, Peter Weinberger und Brian Kernighan zurück. Das Werkzeug gehört bereits seit 1977 zu Unix und ist bis heute ein bewährter Bestandteil für die Administration von Linux-Systemen.

AWK ist besonders praktisch, wenn du bestimmte Spalten aus strukturierten Texten auslesen, Logdateien analysieren, CSV-Daten verarbeiten oder direkt innerhalb einer Shell-Pipeline schnelle Auswertungen erzeugen möchtest, ohne dafür ein vollständiges Skript schreiben zu müssen.

In diesem Tutorial lernst du die Syntax von AWK kennen, arbeitest mit praktischen Beispielen zu Mustererkennung, Feldtrennern und integrierten Variablen und erfährst außerdem, wie sich AWK von anderen Werkzeugen zur Textverarbeitung wie grep und sed unterscheidet.

Wichtige Erkenntnisse:

  • AWK verarbeitet Text Zeile für Zeile und zerlegt jede Zeile anhand eines Feldtrenners in Felder wie $1, $2, … und $NF.
  • Die grundlegende Syntax lautet awk 'pattern { action }' filename. Wird kein Muster angegeben, führt AWK die Aktion für jede Eingabezeile aus.
  • Mit der Option -F legst du den Feldtrenner fest, beispielsweise -F, für CSV-Dateien oder -F: für Dateien mit Doppelpunkten als Trennzeichen.
  • Zu den wichtigsten integrierten Variablen zählen NR für die aktuelle Zeilennummer, NF für die Anzahl der Felder in der aktuellen Zeile, FS für den Eingabe-Feldtrenner, OFS für den Ausgabe-Feldtrenner, RS für den Eingabe-Datensatztrenner und ORS für den Ausgabe-Datensatztrenner.
  • Der BEGIN-Block wird ausgeführt, bevor AWK Eingabezeilen verarbeitet, und eignet sich unter anderem zum Initialisieren von Variablen oder Ausgeben von Überschriften.
  • Der END-Block wird ausgeführt, nachdem sämtliche Eingaben verarbeitet wurden. Er eignet sich daher für Zusammenfassungen, Summen und abschließende Berechnungen.
  • AWK eignet sich hervorragend zum Auslesen einzelner Spalten, für Berechnungen mit Feldwerten sowie zum Umwandeln und Zusammenfassen strukturierter Daten wie Logdateien oder CSV-Dateien.
  • Für einfache Suchvorgänge eignet sich grep, für direkte Textänderungen sed. Sobald Felder, Spaltenberechnungen oder individuell formatierte Ausgaben erforderlich sind, ist AWK häufig die geeignetere Lösung.

Linux-Workloads lassen sich auf skalierbarer und zuverlässiger Cloud-Computing-Infrastruktur betreiben, die für Entwickler ausgelegt ist.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigst du:

  • Ein Linux- oder Unix-System, auf dem AWK installiert ist. Die meisten Distributionen enthalten GNU AWK (gawk) bereits standardmäßig. Mit awk --version kannst du die Installation überprüfen.
  • Grundlegende Kenntnisse im Umgang mit der Linux-Kommandozeile.

Was ist der AWK-Befehl unter Linux und Unix?

AWK ist sowohl ein Werkzeug zur Mustersuche als auch eine Sprache zur Textverarbeitung. Du definierst Regeln nach dem Schema pattern { action }, die AWK anschließend auf jede eingelesene Zeile anwendet. Entspricht eine Zeile dem angegebenen Muster, wird die zugehörige Aktion ausgeführt. Wird kein Muster festgelegt, gilt die Aktion für jede Zeile.

GNU AWK (gawk) ist heute eine der am häufigsten eingesetzten Implementierungen von AWK und dient auf vielen Linux-Distributionen als standardmäßiges awk. Es erweitert den ursprünglichen POSIX-AWK-Standard beispielsweise um eine verbesserte Unicode-Unterstützung sowie zusätzliche String-Funktionen. Welche Version auf deinem System installiert ist, kannst du folgendermaßen überprüfen:

Auf einem typischen Linux-System kann die Ausgabe beispielsweise so aussehen:


GNU Awk 5.2.1, API 3.2, PMA Avon 8-g1, (GNU MPFR 4.2.1, GNU MP 6.3.0)

Wie sich AWK von grep und sed unterscheidet

Alle drei Werkzeuge verarbeiten Text, haben jedoch unterschiedliche Schwerpunkte. grep sucht nach Zeilen, die einem bestimmten Muster entsprechen, und gibt diese aus. sed führt Ersetzungen und andere Bearbeitungen innerhalb eines Textstroms durch. AWK kann vergleichbare Aufgaben übernehmen, bietet darüber hinaus jedoch ein Verständnis für einzelne Felder, ermöglicht Berechnungen und kann formatierte Berichte erzeugen.

Ein schneller Vergleich:

Werkzeug Besonders geeignet für Feldorientiert Berechnungen Mehrzeilige Logik
grep Zeilen finden, die einem Muster entsprechen Nein Nein Nein
sed Suchen und Ersetzen sowie Bearbeiten von Zeilen Nein Nein Eingeschränkt
awk Spalten auslesen, Berechnungen durchführen und Berichte erstellen Ja Ja Ja

Weitere Einzelheiten zu den jeweiligen Werkzeugen findest du in Tutorials zum grep-Befehl und zum sed-Befehl.

AWK-Syntax und grundlegender Aufbau

Beim Verarbeiten strukturierter Textdateien unter Unix oder Linux müssen häufig dieselben Schritte zum Zerlegen und Auswerten von Daten wiederholt werden. AWK vereinfacht diesen Vorgang: Du definierst lediglich die benötigten Muster und Aktionen, während das Werkzeug die eigentliche Verarbeitung übernimmt.

Aufbau des AWK-Befehls

Die grundlegende AWK-Syntax lautet:


awk options ‚pattern { action }‘ input-file

Du kannst die erzeugte Ausgabe außerdem in eine Datei umleiten:


awk options ‚pattern { action }‘ input-file > output-file

Zu den häufig verwendeten Optionen gehören:

  • -F legt den Feldtrenner fest, beispielsweise -F: für durch Doppelpunkte getrennte Daten.
  • -f liest die AWK-Anweisungen aus einer Skriptdatei ein, anstatt sie direkt über die Kommandozeile anzugeben.
  • -v weist einer Variablen einen Wert zu, bevor die Verarbeitung beginnt.

Muster und Aktionsblöcke erklärt

Eine AWK-Regel besteht aus zwei Bestandteilen: einem Muster und einer in geschweiften Klammern definierten Aktion. Beide Bestandteile können auch weggelassen werden:

  • Wird das Muster ausgelassen, führt AWK die Aktion für jede Eingabezeile aus.
  • Wird der Aktionsblock weggelassen, gibt AWK standardmäßig jede Zeile aus, die dem Muster entspricht.

# Jede Zeile ausgeben (kein Muster, print ist die Standardaktion)

awk ‚{ print }‘ file.txt

# Nur Zeilen ausgeben, die dem Muster entsprechen (keine explizite Aktion erforderlich)

awk ‚/error/‘ file.txt

So führst du den AWK-Befehl unter Linux aus

AWK eignet sich besonders für strukturierte Texte, wenn du Spalten schnell auswählen, verändern oder zusammenfassen möchtest. Bevor du komplexere Funktionen verwendest, solltest du zunächst die grundlegenden Möglichkeiten zum Ausführen von AWK-Befehlen unter Linux kennen.

Eine Beispieldatei erstellen

Für die Beispiele in diesem Tutorial wird eine Datei mit dem Namen file.txt verwendet. Erstelle diese Datei, damit du die folgenden Beispiele nachvollziehen kannst:


cat > file.txt << ‚EOF‘
Item Model Country Cost
Phone iPhone USA 999
Laptop MacBook USA 1299
Watch Galaxy Korea 299
Tablet iPad USA 499
Camera Sony Japan 799
EOF

Die Datei enthält vier Spalten: Item, Model, Country und Cost.

AWK auf einer Datei ausführen

Gib den Namen der zu verarbeitenden Datei als letztes Argument des Befehls an:


awk ‚{ print $0 }‘ file.txt

$0 steht für die gesamte aktuelle Eingabezeile. Das Ergebnis lautet:


Item Model Country Cost
Phone iPhone USA 999
Laptop MacBook USA 1299
Watch Galaxy Korea 299
Tablet iPad USA 499
Camera Sony Japan 799

AWK mit Kommandozeilen-Eingaben ausführen

Anstatt Daten aus einer Datei einzulesen, kannst du die Ausgabe eines anderen Befehls über eine Pipe direkt an AWK weitergeben:


echo „Alice Engineering 95000“ | awk ‚{ print $1, „arbeitet in“, $2 }‘

Die Ausgabe lautet:


Alice arbeitet in Engineering

AWK aus einer Skriptdatei ausführen

Bei längeren AWK-Programmen oder Regeln, die du mehrfach verwenden möchtest, kannst du die Anweisungen in einer separaten Datei speichern und sie anschließend mit der Option -f laden:

# Regeln in einer Skriptdatei speichern

echo ‚{ print $1, $4 }‘ > print_item_cost.awk

# Skript ausführen

awk -f print_item_cost.awk file.txt

Die Ausgabe lautet:


Item Cost
Phone 999
Laptop 1299
Watch 299
Tablet 499
Camera 799

AWK-Feldtrenner und Spaltenoperationen

AWK zerlegt jede Eingabezeile anhand eines Trennzeichens in einzelne Felder. Standardmäßig dient beliebiger Leerraum als Trennzeichen, also beispielsweise Leerzeichen oder Tabulatoren.

Den standardmäßigen Feldtrenner verwenden

Die Nummerierung der Felder beginnt bei $1. $0 steht dagegen immer für die vollständige Zeile.

Um beispielsweise die zweite und dritte Spalte auszugeben, verwendest du:


awk ‚{ print $2 „\t“ $3 }‘ file.txt

Das Ergebnis ist:


Model Country
iPhone USA
MacBook USA
Galaxy Korea
iPad USA
Sony Japan

Einen benutzerdefinierten Feldtrenner mit -F festlegen

Die Option -F kommt zum Einsatz, wenn deine Daten mit einem anderen Zeichen als Leerraum getrennt werden. Das ist beispielsweise bei CSV-Daten oder bei Systemdateien wie /etc/passwd der Fall, deren Felder durch Doppelpunkte voneinander getrennt sind.

# Das erste Feld (Benutzername) aus /etc/passwd ausgeben

awk -F: ‚{ print $1 }‘ /etc/passwd | head -5

Die Ausgabe ist:

Bestimmte Spalten mit $1, $2 und $NF ausgeben

$NF ist eine spezielle Referenz auf das letzte Feld des aktuellen Datensatzes. Dabei spielt es keine Rolle, wie viele Felder die jeweilige Zeile tatsächlich enthält.

# Das erste und das letzte Feld ausgeben

awk ‚{ print $1, $NF }‘ file.txt

Die Ausgabe lautet:


Item Cost
Phone 999
Laptop 1299
Watch 299
Tablet 499
Camera 799

AWK: Referenz der integrierten Variablen

AWK stellt mehrere vordefinierte Variablen bereit. Mit ihnen erhältst du Informationen über den aktuell verarbeiteten Datensatz und kannst zugleich steuern, wie Ein- und Ausgaben formatiert werden.

NR, NF, FS, RS, OFS und ORS erklärt

Variable Beschreibung
NR Die Nummer des aktuellen Datensatzes beziehungsweise der aktuellen Zeile, beginnend bei 1
NF Die Anzahl der Felder in der aktuell verarbeiteten Zeile
FS Der Feldtrenner für Eingaben; standardmäßig wird Leerraum verwendet
RS Der Datensatztrenner für Eingaben; standardmäßig ist dies ein Zeilenumbruch
OFS Der Feldtrenner für Ausgaben; standardmäßig wird ein Leerzeichen verwendet
ORS Der Datensatztrenner für Ausgaben; standardmäßig ist dies ein Zeilenumbruch

Praktische Beispiele mit integrierten Variablen

Mit NR kannst du jede Zeile gemeinsam mit ihrer jeweiligen Zeilennummer ausgeben:


awk ‚{ print NR, $0 }‘ file.txt

Das Ergebnis ist:


1 Item Model Country Cost
2 Phone iPhone USA 999
3 Laptop MacBook USA 1299
4 Watch Galaxy Korea 299
5 Tablet iPad USA 499
6 Camera Sony Japan 799

Mit OFS lässt sich das Trennzeichen für die Ausgabe verändern. Das folgende Beispiel erzeugt kommaseparierte Werte:


awk ‚BEGIN { OFS=“,“ } { print $1, $2, $3 }‘ file.txt

Die Ausgabe lautet:


Item,Model,Country
Phone,iPhone,USA
Laptop,MacBook,USA
Watch,Galaxy,Korea
Tablet,iPad,USA
Camera,Sony,Japan

Mit NF kannst du für jede Zeile anzeigen lassen, wie viele Felder sie enthält:


awk ‚{ print NF, $0 }‘ file.txt

Die Ausgabe ist:


4 Item Model Country Cost
4 Phone iPhone USA 999
4 Laptop MacBook USA 1299
4 Watch Galaxy Korea 299
4 Tablet iPad USA 499
4 Camera Sony Japan 799

AWK Pattern Matching: Beispiele zur Mustersuche

Die folgenden Beispiele zeigen verschiedene Möglichkeiten, Text mithilfe der Mustererkennung von AWK zu finden und anschließend zu verarbeiten.

Zeilen mit einer bestimmten Zeichenfolge finden

Um alle Zeilen auszugeben, in denen der Buchstabe o vorkommt, verwendest du:


awk ‚/o/ { print $0 }‘ file.txt

Das Ergebnis lautet:


Item Model Country Cost
Phone iPhone USA 999
Laptop MacBook USA 1299
Watch Galaxy Korea 299
Camera Sony Japan 799

Wenn du zählen möchtest, wie viele Zeilen einem bestimmten Muster entsprechen, kannst du einen Zähler verwenden und ihn anschließend über einen END-Block ausgeben:


awk ‚/a/ { ++cnt } END { print „Anzahl = „, cnt }‘ file.txt

Die Ausgabe lautet:

Reguläre Ausdrücke in AWK verwenden

AWK unterstützt reguläre Ausdrücke direkt innerhalb der Schreibweise /pattern/. Um beispielsweise Zeilen zu finden, die mit einem Großbuchstaben beginnen, auf den ein Kleinbuchstabe folgt, verwendest du:


awk ‚/^[A-Z][a-z]/ { print $0 }‘ file.txt

Das Ergebnis ist:


Phone iPhone USA 999
Laptop MacBook USA 1299
Watch Galaxy Korea 299
Tablet iPad USA 499
Camera Sony Japan 799

Bestimmte Feldwerte mit AWK abgleichen

Wenn du nicht die vollständige Zeile, sondern gezielt den Inhalt eines einzelnen Feldes prüfen möchtest, kannst du anstelle eines regulären Ausdrucks einen Vergleich verwenden:

# Zeilen ausgeben, bei denen Country (Feld 3) USA entspricht

awk ‚$3 == „USA“ { print $0 }‘ file.txt

Die Ausgabe lautet:


Phone iPhone USA 999
Laptop MacBook USA 1299
Tablet iPad USA 499

Auch numerische Werte lassen sich für Filterbedingungen verwenden:

# Zeilen ausgeben, bei denen Cost (Feld 4) größer als 500 ist

awk ‚$4 > 500 { print $0 }‘ file.txt

Das Ergebnis ist:


Item Model Country Cost
Phone iPhone USA 999
Laptop MacBook USA 1299
Camera Sony Japan 799

Um ausschließlich Zeilen mit mehr als 20 Zeichen auszugeben, kannst du die integrierte Funktion length einsetzen:


awk ‚length($0) > 20‘ file.txt

AWK BEGIN- und END-Blöcke

AWK beschränkt sich nicht auf das reine Verarbeiten einzelner Zeilen. Mit den Blöcken BEGIN und END kannst du vorbereitende Aufgaben durchführen, bevor Eingaben gelesen werden, und abschließende Aktionen ausführen, sobald sämtliche Daten verarbeitet wurden.

Was BEGIN und END bewirken

BEGIN und END sind besondere Muster in AWK:

  • Der BEGIN-Block wird genau einmal ausgeführt, bevor AWK die erste Eingabe liest. Du kannst ihn beispielsweise zum Ausgeben von Überschriften, zum Initialisieren von Variablen oder zum Festlegen von Trennzeichen verwenden.
  • Der END-Block wird genau einmal ausgeführt, nachdem AWK sämtliche Eingaben verarbeitet hat. Er eignet sich beispielsweise für Summen, Zusammenfassungen und andere abschließende Ausgaben.

BEGIN zum Festlegen von Variablen vor der Verarbeitung verwenden


awk ‚BEGIN { print „Item\tCost“; print „—-\t—-“ } NR > 1 { print $1 „\t“ $4 }‘ file.txt

Die Ausgabe lautet:


Item Cost

Phone 999
Laptop 1299
Watch 299
Tablet 499
Camera 799

END für Zusammenfassungen nach der Verarbeitung verwenden


awk ‚BEGIN { print „AWK-Verarbeitung startet…“ } { print $1 } END { print „Fertig. Verarbeitet wurden “ NR “ Zeilen.“ }‘ file.txt

Die Ausgabe ist:


AWK-Verarbeitung startet…
Item
Phone
Laptop
Watch
Tablet
Camera
Fertig. Verarbeitet wurden 6 Zeilen.

Bedingungen und Kontrollfluss in AWK

Manche Aufgaben bei der Datenverarbeitung erfordern mehr als eine einfache Mustersuche. AWK stellt dafür Kontrollfluss-Funktionen bereit, mit denen du beispielsweise Statistiken berechnen, Datensätze verfolgen, Werte vorbereiten oder Entscheidungen während der Verarbeitung treffen kannst. Blöcke und logische Bedingungen ermöglichen dabei eine flexible und effiziente Verarbeitung.

if- und if-else-Anweisungen in AWK

AWK unterstützt if, if-else sowie verschachtelte Bedingungen innerhalb von Aktionsblöcken.

# Artikel abhängig vom Preis als teuer oder günstig kennzeichnen

awk ‚NR > 1 { if ($4 > 500) print $1, „ist teuer“; else print $1, „ist günstig“ }‘ file.txt

Die Ausgabe ist:


Phone ist teuer
Laptop ist teuer
Watch ist günstig
Tablet ist günstig
Camera ist teuer

Mehrere Bedingungen kannst du mit && für UND oder || für ODER miteinander verbinden:

# Artikel aus den USA ausgeben, deren Preis über 500 liegt

awk ‚$3 == „USA“ && $4 > 500 { print $0 }‘ file.txt

Das Ergebnis lautet:


Phone iPhone USA 999
Laptop MacBook USA 1299

Schleifen in AWK: for und while

AWK unterstützt sowohl for– als auch while-Schleifen. Sie sind beispielsweise dann hilfreich, wenn du sämtliche Felder einer Zeile nacheinander durchlaufen möchtest:

# Jedes Feld zusammen mit seiner Feldnummer in einer eigenen Zeile ausgeben

awk ‚NR == 2 { for (i = 1; i <= NF; i++) print „Feld “ i „: “ $i }‘ file.txt

Die Ausgabe lautet:


Feld 1: Phone
Feld 2: iPhone
Feld 3: USA
Feld 4: 999

Eine while-Schleife funktioniert nach einem ähnlichen Prinzip:


awk ‚BEGIN { i = 1; while (i <= 5) { print „Zeile:“, i; i++ } }‘

Das Ergebnis ist:


Zeile: 1
Zeile: 2
Zeile: 3
Zeile: 4
Zeile: 5

Praktische AWK-Anwendungsfälle mit Beispielen

Die folgenden praktischen Beispiele zeigen, wie du AWK direkt im Terminal für typische Aufgaben der Datenverarbeitung einsetzen kannst.

/etc/passwd mit AWK auswerten

Die Datei /etc/passwd speichert pro Zeile einen Benutzerdatensatz und verwendet Doppelpunkte als Feldtrenner. Mit AWK und der Option -F: lassen sich einzelne Werte bequem auslesen.

# Benutzername und Standard-Shell jedes Benutzers ausgeben

awk -F: ‚{ print $1, $7 }‘ /etc/passwd | head -5

Auf einem typischen Linux-System kann die Ausgabe beispielsweise so aussehen:


root /bin/bash
daemon /usr/sbin/nologin
bin /usr/sbin/nologin
sys /usr/sbin/nologin
sync /bin/sync

Um ausschließlich Benutzer anzuzeigen, deren konfigurierte Shell /bin/bash ist, verwendest du:


awk -F: ‚$7 == „/bin/bash“ { print $1 }‘ /etc/passwd

CSV-Dateien mit AWK verarbeiten

Erstelle zunächst die folgende Beispiel-CSV-Datei:


cat > employees.csv << ‚EOF‘
Name,Department,Salary
Alice,Engineering,95000
Bob,Marketing,72000
Charlie,Engineering,88000
Diana,HR,65000
Eve,Marketing,78000
EOF

Gib anschließend den Namen und die Abteilung jedes Mitarbeiters aus und überspringe dabei die Kopfzeile:


awk -F, ‚NR > 1 { print $1, „arbeitet in“, $2 }‘ employees.csv

Die Ausgabe lautet:


Alice arbeitet in Engineering
Bob arbeitet in Marketing
Charlie arbeitet in Engineering
Diana arbeitet in HR
Eve arbeitet in Marketing

System-Logdateien mit AWK zusammenfassen

Erstelle für die folgenden Beispiele zunächst eine Beispiel-Logdatei:


cat > access.log << ‚EOF‘
192.168.1.1 GET /index.html 200 1024
192.168.1.2 POST /login 404 512
192.168.1.3 GET /about.html 200 2048
192.168.1.1 GET /contact.html 500 256
192.168.1.4 GET /index.html 200 1024
EOF

Gib alle IP-Adressen aus, bei denen der Statuscode 200 zurückgegeben wurde:


awk ‚$4 == 200 { print $1 }‘ access.log

Die Ausgabe ist:


192.168.1.1
192.168.1.3
192.168.1.4

Um die Anzahl der 404-Fehler zu ermitteln, verwendest du:


awk ‚$4 == 404 { count++ } END { print „404-Fehler:“, count }‘ access.log

Das Ergebnis lautet:

Spaltensummen mit AWK berechnen

Um alle Werte aus der Spalte Cost in file.txt zu addieren und dabei die erste Zeile zu überspringen, kannst du folgenden Befehl verwenden:


awk ‚NR > 1 { sum += $4 } END { print „Gesamtkosten:“, sum }‘ file.txt

Die Ausgabe lautet:

Auch ein Durchschnittswert lässt sich auf diese Weise berechnen:


awk -F, ‚NR > 1 { sum += $3; count++ } END { print „Durchschnittsgehalt:“, sum / count }‘ employees.csv

Das Ergebnis ist:


Durchschnittsgehalt: 79600

AWK-Ausgabe in einer Datei speichern

Wenn du die Ausgabe eines AWK-Befehls dauerhaft speichern möchtest, kannst du sie mit dem Umleitungsoperator > in eine Datei schreiben:


awk ‚/a/ { print $3 „\t“ $4 }‘ file.txt > output.txt

Mit cat kannst du anschließend den Inhalt der Datei überprüfen:

Die Ausgabe lautet:


USA 1299
Korea 299
USA 499
Japan 799

AWK vs. sed vs. grep: Welches Werkzeug eignet sich wann?

Anwendungsfall Geeignetes Werkzeug
Zeilen suchen, die ein bestimmtes Muster enthalten grep
Text innerhalb einer Datei suchen und ersetzen sed
Eine bestimmte Spalte aus strukturierten Daten auslesen awk
Berechnungen mit Spaltenwerten durchführen awk
Formatierte Berichte oder Zusammenfassungen erzeugen awk
Einfache Ersetzungen innerhalb eines Skripts durchführen sed
Logzeilen anhand einer festen Zeichenfolge filtern grep
CSV-Dateien oder durch Doppelpunkte getrennte Daten verarbeiten awk

Verwende grep, wenn du hauptsächlich überprüfen möchtest, ob ein bestimmtes Muster vorkommt, und die passenden Zeilen ausgeben willst. sed eignet sich, wenn Text ersetzt oder entfernt werden soll. AWK ist dagegen besonders sinnvoll, wenn du mit einzelnen Feldern arbeitest, Vergleiche oder Berechnungen durchführen möchtest oder Ausgaben von den Werten mehrerer Spalten abhängig sind.

Häufig gestellte Fragen zu AWK

1. Was ist der AWK-Befehl unter Unix?

AWK ist ein leistungsfähiges Werkzeug zur Textverarbeitung, das sowohl auf Unix- als auch auf Linux-Systemen verfügbar ist. Es wurde für die Suche nach Mustern und die Erstellung von Auswertungen entwickelt und verarbeitet Dateien oder Datenströme jeweils einen Datensatz beziehungsweise eine Zeile nach der anderen. Jede Eingabezeile wird automatisch anhand eines Trennzeichens in einzelne Felder aufgeteilt. Standardmäßig verwendet AWK dafür Leerraum. Anschließend kannst du eigene Regeln in Form sogenannter Muster-Aktions-Paare verwenden, um Datensätze zu filtern, Spalten auszulesen, Berechnungen durchzuführen, Berichte zu erstellen und weitere Verarbeitungsschritte auszuführen. Da AWK direkt mit einzelnen Spalten arbeiten kann, eignet es sich besonders für strukturierte oder getrennte Daten wie Logdateien, CSV-Dateien und Konfigurationsdateien.

2. Wie führt man den AWK-Befehl unter Linux aus?

AWK wird üblicherweise mit folgender Syntax aufgerufen:


awk ‚pattern { action }‘ filename

Für jede Zeile der angegebenen Datei überprüft AWK das definierte Muster. Entspricht die Zeile dem Muster, wird die zugehörige Aktion ausgeführt. Wenn kein Muster angegeben wird, führt AWK die Aktion für jede Zeile aus. Daten können außerdem über eine Pipeline mit command | awk '{ action }' an AWK weitergegeben werden, wodurch sich das Werkzeug unkompliziert in Shell-Pipelines integrieren lässt. AWK kann mehrere Eingabedateien gleichzeitig verarbeiten. Mit Kommandozeilenoptionen wie -F kannst du Feldtrenner definieren, während -f dazu dient, umfangreichere AWK-Programme aus einer externen Datei einzulesen. Dadurch eignet sich AWK für zahlreiche Aufgaben in der Automatisierung und Textverarbeitung.

3. Was macht awk '{ print $1 }'?

Der Befehl awk '{ print $1 }' gibt aus jeder Eingabezeile das erste Feld beziehungsweise die erste Spalte aus. Standardmäßig trennt AWK die einzelnen Felder anhand von Leerraum. $1 steht deshalb für das erste Wort beziehungsweise den ersten Wert einer Zeile.

Enthält eine Zeile beispielsweise die Werte Name Age Country, gibt dieser Befehl lediglich den Wert Name aus. Das Verfahren wird häufig verwendet, um schnell die erste Spalte aus strukturierten Daten zu extrahieren.

4. Was macht awk '{ print $2 }'?

awk '{ print $2 }' liest aus jeder Eingabezeile das zweite Feld aus und gibt es aus. Wird beispielsweise eine Zeile wie John 30 Engineer verarbeitet, liefert der Befehl den Wert 30, da $2 das zweite Feld bezeichnet. Auf diese Weise lassen sich einzelne Spalten aus tabellarischen oder durch Leerraum getrennten Daten sehr einfach extrahieren.

5. Wofür wird die Option -F in AWK verwendet?

Mit der Option -F bestimmst du den Feldtrenner, anhand dessen AWK eine Zeile in einzelne Felder zerlegt. Standardmäßig nutzt AWK Leerraum, mit -F kannst du jedoch ein anderes Zeichen oder sogar einen regulären Ausdruck als Trennzeichen festlegen. Der Befehl awk -F: '{ print $1 }' /etc/passwd weist AWK beispielsweise an, den Doppelpunkt (:) als Feldtrenner zu verwenden. Das ist bei Dateien wie /etc/passwd hilfreich, deren Felder durch Doppelpunkte voneinander getrennt sind. Dadurch kann AWK flexibel mit vielen unterschiedlichen Formaten strukturierter Daten umgehen.

6. Was sind NR und NF in AWK?

NR und NF gehören zu den wichtigsten integrierten Variablen von AWK. NR steht für Number of Record und enthält die Nummer des aktuell verarbeiteten Datensatzes beziehungsweise der aktuellen Zeile. Der Wert wird mit jeder verarbeiteten Eingabezeile erhöht. Dadurch kannst du beispielsweise Zeilennummern ausgeben oder bestimmte Aktionen nur für ausgewählte Zeilen durchführen.

NF steht für Number of Fields und enthält die Anzahl der Felder beziehungsweise Spalten in der aktuellen Zeile. Die Variable ist besonders nützlich, wenn Zeilen unterschiedlich viele Felder enthalten oder wenn du mit $NF gezielt auf das jeweils letzte Feld zugreifen möchtest. Beide Variablen spielen eine wichtige Rolle beim Filtern, Formatieren und Steuern der AWK-Verarbeitung.

7. Was ist der Unterschied zwischen AWK und gawk?

gawk ist die GNU-Implementierung der AWK-Sprache und wird auf vielen modernen Linux-Distributionen als standardmäßiger AWK-Interpreter verwendet. Während traditionelles AWK dem POSIX-Standard folgt, erweitert gawk die Sprache um zusätzliche Funktionen. Dazu zählen unter anderem eine verbesserte Unterstützung für Unicode und Multibyte-Zeichen, zusätzliche String- und Rechenfunktionen, integrierte Netzwerkfunktionen und erweiterte Kommandozeilenoptionen. Die meisten Programme, die für Standard-AWK geschrieben wurden, funktionieren ebenfalls mit gawk. Die zusätzlichen GNU-Funktionen ermöglichen darüber hinaus komplexere Aufgaben bei der Textverarbeitung.

8. Wann sollte man AWK statt Python oder sed verwenden?

AWK eignet sich besonders für schnelle Einzeiler zur Feldextraktion, zur spaltenbasierten Filterung und zur direkten Verarbeitung von Text. Das gilt insbesondere innerhalb von Shell-Pipelines oder bei strukturierten tabellarischen Daten. Erfordert eine Aufgabe dagegen umfangreichere Programmierlogik, komplexe Datenverarbeitung oder die Integration mit anderen Systemen, kann Python aufgrund seiner großen Bibliotheksauswahl und besseren Wartbarkeit bei größeren Skripten die geeignetere Wahl sein. sed ist dagegen besonders stark bei einfachen Ersetzungen und anderen zeilenweisen Änderungen innerhalb von Textdateien oder Datenströmen. Zusammengefasst eignet sich AWK für schnelle feldorientierte Verarbeitung, Python für komplexere Skripte und sed für unkomplizierte Textersetzungen.

Fazit

AWK ist ein vergleichsweise einfaches, gleichzeitig aber leistungsfähiges Werkzeug zur Textverarbeitung unter Linux und Unix. Ganz gleich, ob du eine bestimmte Spalte aus einer Datei auslesen, Werte addieren, eine Logdatei analysieren oder entscheiden möchtest, ob AWK, grep oder sed für eine konkrete Aufgabe besser geeignet ist: Die Beispiele in diesem Tutorial vermitteln dir eine solide Grundlage für die Arbeit mit AWK.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

Weaviate vs. OpenSearch vs. pgvector im Vergleich

AI/ML, Tutorial
Vijonavor 3 Stunden Weaviate, OpenSearch und PostgreSQL mit pgvector im Vergleich für Vektor- und Hybrid-Suche Wenn eine Anwendung Suchfunktionen benötigt, kommen häufig Werkzeuge infrage, die bereits Teil der vorhandenen Infrastruktur sind.…