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
Variable | Bedeutung |
---|---|
NR | Aktuelle Zeilennummer |
NF | Anzahl der Felder in der Zeile |
FS | Eingabe-Feldtrennzeichen |
OFS | Ausgabe-Feldtrennzeichen |
ORS | Ausgabe-Zeilenende |
Beispiel:
awk 'BEGIN {FS=","; OFS=";"} {print $1,$2}' daten.csv
9. Praxisbeispiele
- IP-Adressen aus Logdateien extrahieren
awk '{print $1}' access.log | sort | uniq -c | sort -nr
- Durchschnittswerte berechnen
awk '{sum+=$3} END {print "Durchschnitt:", sum/NR}' daten.txt
- Zeilen mit weniger als 3 Feldern finden
awk 'NF < 3' daten.txt
10. Zusammenfassung
Funktion | Beispiel |
---|---|
Spalten ausgeben | awk '{print $1, $3}' datei |
Trennzeichen setzen | awk -F, '{print $1}' datei.csv |
Zeilen filtern | awk '$3 > 100 {print $1}' datei |
Berechnungen | awk '{sum+=$3} END {print sum}' |
Schreibe einen Kommentar