Der Befehl awk führt einen Musterabgleich für Dateien durch. Es basiert auf der Programmiersprache AWK. Auf das Schlüsselwort awk folgen das Muster, die auszuführende Aktion und der Dateiname. Die auszuführende Aktion wird in geschweiften Klammern angegeben. Das Muster und die auszuführende Aktion sollten in einfachen Anführungszeichen angegeben werden. Wenn das Muster nicht angegeben ist, wird die Aktion für alle Eingabedaten ausgeführt; Wenn die Aktion jedoch nicht angegeben ist, wird die gesamte Zeile gedruckt. Der awk-Befehl kann von der Befehlszeile oder aus einer awk-Skriptdatei heraus ausgeführt werden.
Der awk-Befehl kann verwendet werden, um Textdateien auf verschiedene Arten zu verarbeiten, z. B. um Text zu extrahieren, der einem bestimmten Muster entspricht; Löschen von Text, der einem bestimmten Muster entspricht; Hinzufügen von Text, der einem bestimmten Muster entspricht; und vieles mehr.
Syntax
Die Syntax des awk-Befehls lautet:
# awk [options] ['patterns {actions}'] {file names}
awk-Befehlsbeispiele
1. Drucken Sie die fünfte Spalte (auch bekannt als Feld) in einer durch Leerzeichen getrennten Datei:
# awk '{print $5}' filename
2. Drucken Sie die zweite Spalte der Zeilen mit „foo“ in einer durch Leerzeichen getrennten Datei:
# awk '/foo/ {print $2}' filename
3. Drucken Sie die letzte Spalte jeder Zeile in einer Datei und verwenden Sie ein Komma (statt Leerzeichen) als Feldtrenner:
# awk -F ',' '{print $NF}' filename
4. Summieren Sie die Werte in der ersten Spalte einer Datei und geben Sie die Summe aus:
# awk '{s+=$1} END {print s}' filename
5. Drucken Sie jede dritte Zeile beginnend mit der ersten Zeile:
# awk 'NR%3==1' filename
6. Drucken Sie verschiedene Werte basierend auf Bedingungen:
# awk '{if ($1 == "foo") print "Exact match foo"; else if ($1 ~ "bar") print "Partial match bar"; else print "Baz"}' filename
7. Drucken Sie alle Zeilen, in denen der Wert der 10. Spalte dem angegebenen Wert entspricht:
# awk '($10 == value)'
8. Drucken Sie alle Zeilen, deren Wert in der 10. Spalte zwischen einem Minimum und einem Maximum liegt:
# awk '($10 >= min_value && $10 <= max_value)'