Linux Terminal: Textauswertung für Fortgeschrittene mit awk

Im letzten Beitrag haben wir uns mit sed beschäftigt, einem Werkzeug für Textbearbeitung und -transformation. Nun widmen wir uns awk, einem der leistungsfähigsten Tools unter Linux für die Analyse und Auswertung von Text- und Tabellendaten.

Mit awk lassen sich Daten filtern, formatieren und sogar einfache Berichte erstellen – direkt auf der Kommandozeile.


1. Was ist awk?

awk ist ein zeilenorientierter Interpreter, der jede Eingabezeile in Felder unterteilt und darauf Operationen ausführt. Es eignet sich hervorragend für:

  • Log-Analyse
  • CSV- und Tabellendaten
  • Berichte und Statistiken

Die Entwickler Alfred Aho, Peter Weinberger und Brian Kernighan gaben dem Tool ihren Initialen: A, W, K → awk.


2. Grundlegende Syntax

awk 'Bedingung { Aktion }' datei
  • Bedingung: Filtert Zeilen, auf die Aktionen angewendet werden
  • Aktion: Gibt an, was mit der Zeile passieren soll

3. Wichtige Konzepte

  • Jede Zeile ist ein Datensatz
  • Standardmäßig werden Felder durch Leerzeichen getrennt
  • $1, $2, … stehen für die einzelnen Felder einer Zeile
  • $0 = gesamte Zeile

Beispiel:

echo "Max Müller 30" | awk '{print $1}'

Ausgabe:

Max

4. Spalten ausgeben

Typische Anwendung: Bestimmte Spalten ausgeben.

Beispiel:

awk '{print $1, $3}' daten.txt

→ Gibt die erste und dritte Spalte aus.


5. Mit Trennzeichen arbeiten

Mit -F kann ein eigenes Feldtrennzeichen angegeben werden:

awk -F, '{print $1}' daten.csv

→ Gibt die erste Spalte einer CSV-Datei aus.


6. Bedingungen verwenden

awk unterstützt Bedingungen ähnlich wie Programmiersprachen:

  • Zeilen mit bestimmtem Inhalt: awk '/Fehler/ {print $0}' logfile
  • Numerische Vergleiche: awk '$3 > 100 {print $1, $3}' daten.txt → Zeilen mit Wert in Spalte 3 > 100

7. Musteraktionen und Formatierung

  • NR = Zeilennummer
  • NF = Anzahl Felder in der Zeile

Beispiel:

awk '{print NR, $0}' datei.txt

→ Gibt jede Zeile mit Zeilennummer aus.

Formatierung mit printf:

awk '{printf "%-10s %-5s\n", $1, $2}' daten.txt

8. Eingebaute Variablen

VariableBedeutung
NRAktuelle Zeilennummer
NFAnzahl der Felder in der Zeile
FSEingabe-Feldtrennzeichen
OFSAusgabe-Feldtrennzeichen
ORSAusgabe-Zeilenende

Beispiel:

awk 'BEGIN {FS=","; OFS=";"} {print $1,$2}' daten.csv

9. Praxisbeispiele

  1. IP-Adressen aus Logdateien extrahieren awk '{print $1}' access.log | sort | uniq -c | sort -nr
  2. Durchschnittswerte berechnen awk '{sum+=$3} END {print "Durchschnitt:", sum/NR}' daten.txt
  3. Zeilen mit weniger als 3 Feldern finden awk 'NF < 3' daten.txt

10. Zusammenfassung

FunktionBeispiel
Spalten ausgebenawk '{print $1, $3}' datei
Trennzeichen setzenawk -F, '{print $1}' datei.csv
Zeilen filternawk '$3 > 100 {print $1}' datei
Berechnungenawk '{sum+=$3} END {print sum}'

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert