Formatierung von Daten mit awk
1. Einführung in awk
awk
ist ein leistungsstarkes Text-Tool zur Datenverarbeitung. Wenn man sich eine Textdatei als Tabelle vorstellt, bei der Zeilen - naja, Zeilen sind (logisch), und Spalten durch Leerzeichen getrennte Daten enthalten, dann wird awk
zu unserem besten Kumpel. Es hilft, Spalten schnell auszuwählen, Zeilen zu filtern, Daten zu formatieren und sogar arithmetische Operationen durchzuführen.
Das Tool wurde nach seinen Autoren benannt: Alfred Aho, Peter Weinberger und Brian Kernighan (ja, genau der, der auch bei der Entwicklung der Programmiersprache C beteiligt war).
Das Hauptkonzept von awk
ist die Verarbeitung von Daten durch Muster und Aktionen, was es zu einer Art Mini-Programmiersprache macht.
Syntax von awk
Der grundlegende Syntax des Befehls sieht wie folgt aus:
awk 'muster {aktion}' datei
muster
– die Bedingung, die für jede Zeile der Datei überprüft wird.aktion
– die Operationen, die auf Zeilen angewendet werden, die dem Muster entsprechen.- Wenn kein Muster vorhanden ist, wird die Aktion für jede Zeile ausgeführt.
Beispiel:
awk '{print $1}' data.txt
Dieser Befehl gibt die erste Spalte ($1
) für jede Zeile der Datei data.txt
aus.
2. Grundlegende Funktionen von awk
1. Auswahl von Spalten
Die einfachste Art, awk
zu verwenden, ist die Auswahl einer oder mehrerer Spalten aus einer Datei. Ein Feld wird als $n
bezeichnet, wobei n
die Spaltennummer ab 1 ist.
Beispiel:
Die erste und dritte Spalte ausgeben:
awk '{print $1, $3}' data.txt
Angenommen, unsere Datei data.txt
sieht so aus:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Ergebnis:
John Engineer
Jane Designer
Mike Developer
2. Bedingte Verarbeitung von Zeilen
Mit Bedingungen können nur die Zeilen verarbeitet werden, die bestimmten Kriterien entsprechen.
Beispiel:
Zeilen ausgeben, bei denen der Wert in der zweiten Spalte größer als 27 ist:
awk '$2 > 27 {print $1, $2}' data.txt
Ergebnis:
Jane 30
Mike 28
3. Arithmetische Operationen
awk
kann arithmetische Operationen ausführen. Das ist hilfreich, wenn du etwas "on the fly" berechnen möchtest.
Beispiel:
10 zum Wert in der zweiten Spalte hinzufügen:
awk '{print $1, $2+10}' data.txt
Ergebnis:
John 35
Jane 40
Mike 38
4. Zählen von Zeilen
awk
weiß automatisch, wie viele Zeilen verarbeitet wurden. Diese Information ist in der Variablen NR
(Number of Records) gespeichert.
Beispiel:
Die Anzahl der Zeilen in einer Datei zählen:
awk 'END {print NR}' data.txt
Ergebnis:
3
3. Erweiterte Funktionen
1. Ausgabeformatierung
awk
unterstützt leistungsstarke formatierte Ausgaben mit der Funktion printf
. Das ist ein Äquivalent zur Funktion printf
in C.
Beispiel:
Daten mit Ausrichtung ausgeben:
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Ergebnis:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Variablen
Du kannst Variablen verwenden, um Daten zu speichern und die Arbeit zu vereinfachen.
Beispiel:
Die Summe der zweiten Spalte berechnen:
awk '{sum += $2} END {print "Gesamtalter:", sum}' data.txt
Ergebnis:
Gesamtalter: 83
3. Reguläre Ausdrücke
awk
unterstützt reguläre Ausdrücke, um Zeilen zu suchen.
Beispiel:
Zeilen ausgeben, in denen die erste Spalte den Buchstaben J
enthält:
awk '/J/ {print $0}' data.txt
Ergebnis:
John 25 Engineer
Jane 30 Designer
4. Beispiel in der Praxis
1. Analyse eines Systemlogs
Angenommen, wir haben eine Systemlog-Datei /var/log/syslog
, und wir möchten herausfinden, welche Prozesse am häufigsten erwähnt werden.
Befehl:
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Was dieser Befehl macht:
cat /var/log/syslog
— liest den Inhalt der Datei.awk '{print $5}'
— extrahiert die fünfte Spalte (den Namen des Prozesses).sort
— sortiert die Zeilen alphabetisch.uniq -c
— zählt die Anzahl der einzigartigen Zeilen.sort -nr
— sortiert die Zeilen in absteigender Reihenfolge nach Zahlenwert.head -10
— zeigt die Top-10-Prozesse an.
2. Erstellung eines Gehaltsberichts
Wir haben eine Datei salaries.txt
:
John 25 4000
Jane 30 5000
Mike 28 4500
Aufgabe:
Erhöhe die Gehälter um 10% und zeige den abschließenden Bericht an.
Lösung:
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Ergebnis:
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. Häufige Fehler bei der Arbeit mit awk
Probleme mit Trennzeichen
Standardmäßig verwendet awk
Leerzeichen oder Tabulatoren als Trennzeichen. Wenn deine Daten mit etwas anderem getrennt sind (z. B. Kommas oder Doppelpunkten), musst du dies mit der Option -F
angeben.
Beispiel:
Datei data.csv
:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
Befehl zur Arbeit mit CSV:
awk -F',' '{print $1, $3}' data.csv
Ergebnis:
John Engineer
Jane Designer
Mike Developer
Auslassen von Feldern aufgrund eines fehlerhaften Formats
Manchmal können Zeilen unerwartete Leerzeichen oder fehlende Spalten enthalten. Dies kann Fehler verursachen. Es ist immer hilfreich, die Daten vor Beginn der Arbeit zu überprüfen.
Praktische Anwendung
Du hast gerade gelernt, wie man awk
verwendet, um Systemprotokolle zu analysieren, Gehaltsdaten zu verarbeiten und Berichte zu erstellen. Diese Fähigkeiten helfen dir bei der Arbeit mit großen Datenbanken, CSV-Dateien und Logs in echten Projekten. Wenn du im Bereich DevOps arbeitest, wird das Analysieren von Systemprotokollen mit awk
zu deiner Superkraft. Und wenn du Entwickler bist, ist es eine großartige Möglichkeit, Daten direkt im Terminal schnell zu bearbeiten.
Für ein tieferes Verständnis von awk
empfehle ich einen Blick in die offizielle GNU Awk Dokumentation. Jetzt weißt du genau, wie du deine Daten besser handhaben kannst!
GO TO FULL VERSION