Einführung
Neben dem Filtern und Extrahieren von Text ist awk eine leistungsfähige Sprache zur Textverarbeitung, mit der Sie arithmetische Operationen durchführen können. Sie können Spalten summieren, Durchschnittswerte berechnen und Vorkommen zählen. Dadurch lassen sich direkt über die Befehlszeile Berichte und Statistiken erstellen.
Das ist ein Grund dafür, dass awk seit Jahrzehnten nützlich ist: Viele Aufgaben im laufenden Betrieb erfordern einfache Berichte aus Textdateien. Mit awk können Sie diese erstellen, ohne eine vollständige Tabellenkalkulation oder eine separate Programmierumgebung zu benötigen.
In diesem Lab lernen Sie, wie Sie awk für folgende Aufgaben verwenden:
- Variablen initialisieren: Startwerte im
BEGIN-Block festlegen. - Berechnungen durchführen: Laufende Summen bilden, indem Sie die Werte jeder Zeile addieren.
- Endergebnisse ausgeben: Summen und Zusammenfassungen im
END-Block ausgeben. - Bedingt zählen: Nur die Zeilen zählen, die bestimmte Kriterien erfüllen.
Eine Variable initialisieren
Bevor Sie mit Berechnungen beginnen, müssen Sie häufig Variablen initialisieren. In awk eignet sich der BEGIN-Block besonders gut dafür, weil er einmal vor der Verarbeitung der ersten Zeile ausgeführt wird.
Damit ist BEGIN der natürliche Ort für vorbereitende Aufgaben, etwa zum Initialisieren von Zählern, Summen oder Überschriften. In anderen Programmiersprachen übernimmt Initialisierungscode eine vergleichbare Funktion.
Sehen Sie sich zunächst die Datendatei data.txt an:
cat data.txt
Die Datei enthält zwei Spalten: Item ($1) und Quantity ($2).
Erstellen Sie eine Variable namens total und setzen Sie sie auf 0.
Führen Sie diesen Befehl aus:
awk 'BEGIN { total=0; print "Calculator ready. Total is initialized to:", total }' data.txt
So funktioniert der Befehl:
awkführt denBEGIN-Block aus.- Die Variable
totalwird auf 0 gesetzt. - Die Meldung wird ausgegeben.
- Da nach dem
BEGIN-Block kein Hauptblock folgt, endet die Ausführung an dieser Stelle. Technisch wäreawkjedoch bereit, die Datei zu verarbeiten.
Eine Spalte summieren
Verarbeiten Sie nun die Datei. Sie möchten die Werte der zweiten Spalte ($2) summieren, die die jeweilige Menge darstellt.
Für jede von awk gelesene Zeile sollen Sie $2 zur Variablen total addieren.
Die Syntax für die Zuweisung einer Addition lautet total += $2. Das ist eine Kurzform von total = total + $2.
Hier wird awk zu mehr als einem einfachen Spaltendrucker. Während awk die Datei verarbeitet, behält es den aktuellen Zustand bei. Dadurch können Sie Summen und Zusammenfassungen schrittweise aufbauen, anstatt nur unveränderte Zeilen auszugeben.
Führen Sie diesen Befehl aus, um die Berechnung Zeile für Zeile zu verfolgen:
awk 'BEGIN { total=0 } { total += $2; print "Added", $1, "("$2") - Current Total:", total }' data.txt
Die Logik:
- BEGIN:
totalauf 0 initialisieren. - Hauptschleife: Für jede Zeile die Menge (
$2) zutotaladdieren und den Status ausgeben.
Sie sehen, wie die Summe mit jedem verarbeiteten Artikel steigt.
Das Endergebnis ausgeben
Normalerweise benötigen Sie nur die endgültige Summe und nicht die Zwischenschritte.
Dafür verwenden Sie den END-Block. Dieser Block wird einmal ausgeführt, nachdem alle Zeilen verarbeitet wurden.
Ein awk-Skript besteht daher häufig aus drei Phasen: BEGIN für die Vorbereitung, dem Hauptblock für die Verarbeitung jedes Datensatzes und END für den abschließenden Bericht. Diese Struktur ist eines der wichtigsten mentalen Modelle für die effektive Verwendung von awk.
Führen Sie die bereinigte Version des Befehls aus:
awk 'BEGIN { total=0 } { total += $2 } END { print "Final Total Quantity:", total }' data.txt
Aufschlüsselung:
BEGIN:totalauf 0 setzen.{ ... }: Die Datei lesen und$2zutotaladdieren, ohne dabei eine Ausgabe zu erzeugen.END: Nach dem Erreichen des Dateiende den endgültigen Wert vontotalausgeben.
Die Ausgabe sollte Final Total Quantity: 22 lauten.
Bedingt zählen
Oft müssen Sie Vorkommen anhand einer Bedingung zählen, anstatt einfach alle Werte zu summieren.
Beispiel: „Wie viele Artikel haben eine Lagermenge von mehr als 4?“
- Einen Zähler initialisieren (
count = 0). - Jede Zeile prüfen:
if ($2 > 4). - Wenn die Bedingung wahr ist, den Zähler erhöhen:
count++. - Das Ergebnis im
END-Block ausgeben.
Dieses Beispiel zeigt, wie awk das Parsen, Bedingungen und arithmetische Operationen in einem einzigen Durchlauf der Datei verbindet. Bei vielen betrieblichen Berichten müssen Sie dadurch kein separates Programm in einer anderen Sprache schreiben.
Führen Sie den Zählbefehl aus:
awk 'BEGIN { count=0 } { if ($2 > 4) count++ } END { print "Items with quantity > 4:", count }' data.txt
Das Ergebnis sollte 2 sein (Apple und Cherry).
Sie können auch mehrere Verarbeitungsschritte kombinieren. Mit dem folgenden Befehl summieren Sie nur die Werte, die größer als 4 sind:
awk 'BEGIN { sum=0 } { if ($2 > 4) sum += $2 } END { print "Sum of quantities > 4:", sum }' data.txt
Die Summe beträgt 13 (5 + 8).
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie awk für Berechnungen und Statistiken verwenden:
- BEGIN-Block: Variablen initialisieren, bevor die Verarbeitung beginnt.
- Arithmetik (
+=): Berechnungen wie das zeilenweise Summieren von Spalten durchführen. - Bedingungen (
if): Logik nur ausführen, wenn bestimmte Kriterien erfüllt sind, etwa beim Zählen. - END-Block: Die Endergebnisse ausgeben, nachdem die Dateiverarbeitung abgeschlossen ist.
Mit diesen Funktionen können Sie direkt im Terminal anspruchsvolle Datenzusammenfassungen und Kennzahlen aus Textdateien erstellen.



