CodeGym /Kurse /Docker SELF /Formatierung von Daten mit `awk`

Formatierung von Daten mit `awk`

Docker SELF
Level 8 , Lektion 2
Verfügbar

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:

  1. cat /var/log/syslog — liest den Inhalt der Datei.
  2. awk '{print $5}' — extrahiert die fünfte Spalte (den Namen des Prozesses).
  3. sort — sortiert die Zeilen alphabetisch.
  4. uniq -c — zählt die Anzahl der einzigartigen Zeilen.
  5. sort -nr — sortiert die Zeilen in absteigender Reihenfolge nach Zahlenwert.
  6. 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!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION