AWK-Berechnungen

LinuxBeginner
Jetzt üben

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:

  1. Variablen initialisieren: Startwerte im BEGIN-Block festlegen.
  2. Berechnungen durchführen: Laufende Summen bilden, indem Sie die Werte jeder Zeile addieren.
  3. Endergebnisse ausgeben: Summen und Zusammenfassungen im END-Block ausgeben.
  4. 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:

  1. awk führt den BEGIN-Block aus.
  2. Die Variable total wird auf 0 gesetzt.
  3. Die Meldung wird ausgegeben.
  4. Da nach dem BEGIN-Block kein Hauptblock folgt, endet die Ausführung an dieser Stelle. Technisch wäre awk jedoch 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: total auf 0 initialisieren.
  • Hauptschleife: Für jede Zeile die Menge ($2) zu total addieren 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:

  1. BEGIN: total auf 0 setzen.
  2. { ... }: Die Datei lesen und $2 zu total addieren, ohne dabei eine Ausgabe zu erzeugen.
  3. END: Nach dem Erreichen des Dateiende den endgültigen Wert von total ausgeben.

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?“

  1. Einen Zähler initialisieren (count = 0).
  2. Jede Zeile prüfen: if ($2 > 4).
  3. Wenn die Bedingung wahr ist, den Zähler erhöhen: count++.
  4. 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:

  1. BEGIN-Block: Variablen initialisieren, bevor die Verarbeitung beginnt.
  2. Arithmetik (+=): Berechnungen wie das zeilenweise Summieren von Spalten durchführen.
  3. Bedingungen (if): Logik nur ausführen, wenn bestimmte Kriterien erfüllt sind, etwa beim Zählen.
  4. 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.