Awk Beispiele: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Awk – Beispiele = * Praktische Beispiele für die Arbeit mit Awk. == Einfache Spaltenausgabe == * awk '{ print $1 }' datei.txt * awk '{ print $1, $3 }' d…“) |
|||
| Zeile 5: | Zeile 5: | ||
== Einfache Spaltenausgabe == | == Einfache Spaltenausgabe == | ||
* awk '{ print $1 }' datei.txt | * awk '{ print $1 }' datei.txt | ||
| + | → Gibt nur die erste Spalte jeder Zeile aus | ||
| + | |||
* awk '{ print $1, $3 }' datei.txt | * 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 == | == Feldtrennzeichen ändern == | ||
* awk -F':' '{ print $1, $3 }' /etc/passwd | * 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 == | == Zeilen filtern == | ||
* awk '/ERROR/ { print $0 }' log.txt | * awk '/ERROR/ { print $0 }' log.txt | ||
| + | → Gibt nur Zeilen aus, die "ERROR" enthalten | ||
| + | |||
* awk '$3 > 100 { print $1, $3 }' daten.txt | * 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 == | == Summen und Berechnungen == | ||
* awk '{ sum += $2 } END { print sum }' datei.txt | * 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 | * 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 == | == Variablen von außen == | ||
* awk -v min=50 '$2 > min { print $0 }' datei.txt | * 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 == | == Mehrere Aktionen == | ||
* awk '{ print $1; print $2 }' datei.txt | * 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 == | == Aufgaben == | ||
| Zeile 29: | Zeile 107: | ||
* Berechne die Summe der dritten Spalte. | * Berechne die Summe der dritten Spalte. | ||
* Filtere alle Zeilen, die "WARN" enthalten und gebe nur die ersten beiden Felder aus. | * 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. | ||
Aktuelle Version vom 18. Oktober 2025, 08:56 Uhr
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.