Übersicht
awk ist eine Programmiersprache, die Textdateien zeilenweise liest, jede Zeile in Felder (fields) aufteilt und diese dann gemäß definierten Regeln verarbeitet. Die Option `-F` definiert den Trenner, der als Kriterium für die Feldaufteilung dient. Neben dem standardmäßigen Leerzeichen können verschiedene Trenner wie Kommas, Doppelpunkte, bestimmte Zeichenketten oder reguläre Ausdrücke verwendet werden.
Hauptmerkmale
- Festlegen benutzerdefinierter Feldtrenner
- Verwendung regulärer Ausdrücke als Trenner möglich
- Verarbeitung strukturierter Textdaten wie CSV, Logdateien
- Einfache Datenextraktion und -transformation
Wichtige Optionen
Der awk-Befehl bietet verschiedene Optionen, aber hier konzentrieren wir uns auf die wichtige Option `-F` im Zusammenhang mit der Feldtrennung.
Feldtrennung
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.
Anwendungsbeispiele
Beispiele für die Verarbeitung verschiedener Textdatenformate mit der Option `-F`.
Ausgabe bestimmter Felder aus einer CSV-Datei, getrennt durch Kommas (,)
echo "apple,banana,cherry,date" > data.csv
awk -F',' '{print $1, $3}' data.csv
Gibt das erste und dritte Feld aus der Datei data.csv aus, getrennt durch Kommas.
Ausgabe von Benutzernamen und Shell aus der Datei /etc/passwd, getrennt durch Doppelpunkte (:)
awk -F':' '{print $1, $7}' /etc/passwd
Gibt den Benutzernamen (erstes Feld) und die Login-Shell (siebtes Feld) aus der Datei /etc/passwd aus.
Festlegen mehrerer Trenner (Leerzeichen oder Tabulator) mit regulären Ausdrücken
echo "field1 field2\tfield3" > data.txt
awk -F'[ \t]+' '{print $1, $2}' data.txt
Mehrere aufeinanderfolgende Leerzeichen oder Tabulatoren werden als ein Trenner behandelt, um das erste und zweite Feld auszugeben. (Ähnlich dem Standardverhalten)
Verwendung einer bestimmten Zeichenkette als Trenner
echo "Header---Content Body---Footer" > multi_line_data.txt
awk -F'---' '{print $1, $2}' multi_line_data.txt
Gibt das erste und zweite Feld aus, wobei die Zeichenkette '---' als Feldtrenner in der Eingabe verwendet wird.
Ausgabe des dritten Feldes von Zeilen, bei denen das erste Feld einem bestimmten Wert entspricht
echo "root:x:0:0:root:/root:/bin/bash\nuser:x:1000:1000:user:/home/user:/bin/bash" > users.txt
awk -F':' '$1 == "root" {print $3}' users.txt
Sucht nur nach Zeilen, bei denen das erste Feld 'root' ist, und gibt das dritte Feld aus, wobei die durch Doppelpunkte getrennte Datei verwendet wird.
Tipps & Hinweise
Nützliche Tipps und zu beachtende Punkte bei der Verwendung von awk -F.
Reguläre Ausdruckstrenner
Der an die Option `-F` übergebene Trenner wird als regulärer Ausdruck interpretiert. Daher müssen Sonderzeichen wie `.` oder `*` mit `\.` oder `\*` maskiert werden, um sie als literale Zeichen zu verwenden.
- Beispiel: `awk -F'\.' '{print $1}' filename` (Verwendet den Punkt (.) als Trenner)
- Beispiel: `awk -F'[[:space:]]+' '{print $1}' filename` (Verwendet alle Leerzeichen als Trenner)
Interne Variable FS (Field Separator)
Die Option `-F` ist identisch mit dem Setzen der internen Variable `FS`. Sie können den Trenner innerhalb des Skripts dynamisch steuern, indem Sie `FS` im `BEGIN`-Block setzen.
- Beispiel: `awk 'BEGIN {FS=","} {print $1}' data.csv`
Ausgabefeldtrenner (OFS)
Unabhängig vom Eingabefeldtrenner (`FS`) können Sie die Felder, die mit der `print`-Anweisung ausgegeben werden, durch Setzen der `OFS` (Output Field Separator) Variable trennen. Der Standardwert ist ein Leerzeichen.
- Beispiel: `awk -F',' 'BEGIN {OFS=":"} {print $1, $3}' data.csv` (Verwendet einen Doppelpunkt anstelle eines Kommas bei der Ausgabe)