Awk Beispiele

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Awk – Beispiele

  • Praktische Beispiele für die Arbeit mit Awk.

Einfache Spaltenausgabe

  • awk '{ print $1 }' datei.txt
 → Gibt nur die erste Spalte jeder Zeile aus
  • awk '{ print $1, $3 }' datei.txt
 → Gibt die erste und dritte Spalte jeder Zeile aus
  • awk '{ print $NF }' datei.txt
 → Gibt die letzte Spalte jeder Zeile aus
  • awk '{ print $(NF-1) }' datei.txt
 → Gibt die vorletzte Spalte jeder Zeile aus

Feldtrennzeichen ändern

  • awk -F':' '{ print $1, $3 }' /etc/passwd
 → Verwendet Doppelpunkt als Trennzeichen (typisch für /etc/passwd)
  • awk -F';' '{ print $1, $2 }' daten.csv
 → Verwendet Semikolon als Trennzeichen (typisch für CSV)
  • awk -F'[ ,]' '{ print $1, $2 }' datei.txt
 → Verwendet Leerzeichen ODER Komma als Trennzeichen
  • awk -F'\t' '{ print $1, $3 }' tabellarisch.txt
 → Verwendet Tabulator als Trennzeichen

Zeilen filtern

  • awk '/ERROR/ { print $0 }' log.txt
 → Gibt nur Zeilen aus, die "ERROR" enthalten
  • awk '$3 > 100 { print $1, $3 }' daten.txt
 → Gibt erste und dritte Spalte aus, wenn dritte Spalte > 100
  • awk 'NR == 1 || $2 > 50' datei.txt
 → Gibt erste Zeile (Header) und alle Zeilen mit Spalte 2 > 50 aus
  • awk 'NF > 3' datei.txt
 → Gibt nur Zeilen mit mehr als 3 Feldern aus
  • awk 'length($0) > 80' datei.txt
 → Gibt nur Zeilen mit mehr als 80 Zeichen aus

Bedingte Anweisungen

  • awk '{ if ($3 > 100) print $1, $3 }' datei.txt
 → Wenn dritte Spalte > 100, gib erste und dritte Spalte aus
  • awk '{ if ($2 == "JA") print $1; else print "NEIN" }' daten.txt
 → Wenn zweite Spalte "JA" ist, gib erste Spalte aus, sonst "NEIN"
  • awk '{ status = ($3 > 50) ? "HOCH" : "NIEDRIG"; print $1, status }' datei.txt
 → Ternary Operator: Weist "HOCH" oder "NIEDRIG" zu basierend auf Spalte 3

Summen und Berechnungen

  • awk '{ sum += $2 } END { print sum }' datei.txt
 → Berechnet Summe der zweiten Spalte und gibt sie am Ende aus
  • awk '{ print $1, $2*2 }' datei.txt
 → Gibt erste Spalte und den doppelten Wert der zweiten Spalte aus
  • awk '{ sum += $3; count++ } END { print "Durchschnitt:", sum/count }' datei.txt
 → Berechnet Durchschnitt der dritten Spalte
  • awk '{ max = ($1 > max) ? $1 : max } END { print "Maximum:", max }' datei.txt
 → Findet den Maximalwert in der ersten Spalte

Formatierte Ausgabe

  • awk '{ printf "%-10s %5d\n", $1, $2 }' datei.txt
 → Formatierte Ausgabe: Text linksbündig, Zahl rechtsbündig
  • awk '{ printf "Name: %s, Wert: %.2f\n", $1, $2 }' daten.txt
 → Formatierte Ausgabe mit Text und Gleitkommazahl (2 Nachkommastellen)
  • awk 'BEGIN { print "Header"; print "------" } { print $1, $2 }' datei.txt
 → Gibt zuerst Header aus, dann die Daten

BEGIN und END Blöcke

  • awk 'BEGIN { FS=":"; OFS=" | " } { print $1, $3 }' /etc/passwd
 → Setzt Feldtrennzeichen vor Verarbeitung und ändert Ausgabe-Trennzeichen
  • awk 'END { print NR, "Zeilen verarbeitet" }' datei.txt
 → Gibt Gesamtzahl der Zeilen am Ende aus
  • awk 'BEGIN { sum=0 } { sum+=$1 } END { print "Summe:", sum }' datei.txt
 → Initialisiert Variable, summiert und gibt Ergebnis aus

Variablen von außen

  • awk -v min=50 '$2 > min { print $0 }' datei.txt
 → Übergibt Variable "min" an Awk und filtert danach
  • awk -v datum="2024" '$1 == datum' log.txt
 → Sucht nach Zeilen, deren erste Spalte dem übergebenen Datum entspricht

Mehrere Aktionen

  • awk '{ print $1; print $2 }' datei.txt
 → Gibt erste und zweite Spalte in separaten Zeilen aus
  • awk '{ for(i=1; i<=NF; i++) print $i }' datei.txt
 → Gibt jedes Feld einer Zeile in separater Zeile aus

Aufgaben

  • Gib die erste und letzte Spalte einer CSV-Datei aus.
  • Zeige alle Zeilen an, bei denen das zweite Feld größer als 10 ist.
  • Berechne die Summe der dritten Spalte.
  • Filtere alle Zeilen, die "WARN" enthalten und gebe nur die ersten beiden Felder aus.
  • Erstelle einen formatierten Bericht mit Kopfzeile und Summe.
  • Zähle wie viele Zeilen mehr als 5 Felder haben.