Übersicht
awk liest die Eingabe als Datensätze (standardmäßig Zeilen), teilt sie durch einen Feldtrenner (FS) und wendet dann Muster/Aktionen { ... } an, um die gewünschte Ausgabe (OFS) zu erzeugen. Häufige Anwendungen sind das Extrahieren von Spalten, bedingtes Filtern, Berechnen von Summen/Durchschnitten und Formatkonvertierungen.
Wichtige eingebaute Variablen
Die wichtigsten eingebauten Variablen zur Steuerung von Ein-/Ausgabe und Formatierung.
- NR: Anzahl der bisher gelesenen Datensätze (Zeilen)
- FNR: Datensatznummer in der aktuellen Datei
- NF: Anzahl der Felder im aktuellen Datensatz
- FS: Eingabefeld-Trenner (Standard: Leerzeichen)
- OFS: Ausgabefeld-Trenner (Standard: Leerzeichen)
- RS: Datensatz-Trenner (Standard: Zeilenumbruch)
- ORS: Ausgabe-Datensatz-Trenner (Standard: Zeilenumbruch)
Grundlegende Form
awk 'Muster { Aktion }' input.txt
awk -f program.awk input.txt
Der Muster-/Aktionsblock wird in einer Zeile oder über eine Skriptdatei mit -f übergeben.
Wichtige Optionen
Häufig verwendete Optionen im praktischen Einsatz, gruppiert nach Situationen. Inklusive gawk-kompatibler Optionen.
1) Grundlegende Ausführung/Eingabe
2) Feld-/Variablenübergabe
3) Debugging/Kompatibilität (gawk)
4) Hilfe/Version
Erzeugter Befehl:
Kombinieren Sie die Befehle.
Beschreibung:
`awk` Führen Sie den Befehl aus.
Kombinieren Sie diese Optionen und führen Sie die Befehle virtuell zusammen mit der KI aus.
Häufig verwendete Muster
Spaltenextraktion
awk -F ':' '{ print $1, $3 }' /etc/passwd
Gibt nur das 1. und 3. durch Doppelpunkt getrennte Feld aus.
Bedingter Filter
awk '$5 > 100 { print }' data.tsv
Gibt nur Datensätze aus, bei denen der Wert des 5. Feldes größer als 100 ist.
Aggregationsbeispiel
awk '{ sum += $2 } END { print sum }' data.txt
Summe der zweiten Spalte
Variablenübergabe und Format
awk -v OFS=',' '$1=="KEY" { print $1, $2, $3 }' input.txt
Setzt OFS auf Komma und gibt nur bestimmte Schlüssel aus.
Praktische Tipps
Die zeilenweise Stream-Verarbeitung ist in Kombination mit Pipes sehr mächtig.
- Reguläre Ausdrücke können als Feldtrenner verwendet werden: -F '[,:\t]+'
- Mehrere -e-Optionen ermöglichen das Schreiben von Programmen in Teilen.
- Lange Skripte mit -f trennen und mit Git versionskontrollieren.
- Passen Sie OFS/ORS für das gewünschte Ausgabeformat an.
- Für große Eingaben die Pipeline vereinfachen und nur die minimal notwendigen Operationen ausführen.