gawk/Programmaufbau

Aus Foxwiki


Allgemeiner Programmaufbau

[[Image:Grafik4.png|alt="Abbildung 1: Die 3 Bestandteile eines Awk-Programms"]]

Ein Awk-Programm lässt sich in drei wesentliche Bestandteile zerlegen:

  1. Eine optionale Anweisung, die einmalig vor der Verarbeitung der Eingabedaten durchlaufen wird
  2. Ein Hauptprogramm, bestehend aus beliebig vielen Anweisungen, das für jede Eingabezeile erneut ausgeführt wird, es sei denn, eine bestimmte Bedingung führt zum vorzeitigen Abbruch
  3. Eine optionale Anweisung, die einmalig nach der Verarbeitung der Eingabedaten durchlaufen wird

Eine Anweisung besteht wiederum aus einem optionalen Muster, gefolgt von einem Kommandoblock, der in geschweifte Klammern eingeschlossen wird.

/Muster/ { Kommando [; Kommando] }
  • Der Kommandoblock darf durchaus auf mehrere Zeilen verteilt werden.

Er endet mit der abschließenden geschweiften Klammer, sodass die folgende Aufteilung legitim und aus Gründen der Übersichtlichkeit bei größeren Kommandoblöcken zu empfehlen ist:

/Muster/ {
Kommando;
Kommando;
...
}

Semikola und Zeilenumbrüche trennen Kommandos, sodass dem letzten Kommando auf einer Zeile kein Semikolon folgen muss.

  • Da es aber auch nichts schadet, werden wir es in den weiteren Beispielen verwenden.
  • Die Muster können reguläre Ausdrücke oder Variablenvergleiche sein.* Sie werden mit der aktuellen Eingabezeile verglichen, woraufhin bei Übereinstimmung der Kommandoblock betreten wird.
  • Fehlt das Muster, wird der Kommandoblock auf jeden Fall ausgeführt.
  • Zwei spezielle Muster kennzeichnen die anfänglich bzw. 
  • abschließend auszuführenden Anweisungen.* Die Kommandos hinter dem Muster BEGIN werden zumeist zu Variableninitialisierungen oder einführenden Ausgaben genutzt.
  • Dementsprechend ermöglicht das Muster END finale Aktionen, wie die Ausgabe von Ergebnissen.

Mit diesen Vorkenntnissen sollte die Funktionsweise des ersten Programms leicht nachvollziehbar sein; es zählt einfach nur die Zeilen der Eingabe und gibt das Resultat aus:

BEGIN {
 print "Zählen von Eingabezeilen";
 zaehler=0;
 }

 { zaehler++; }

END { print "Ergebnis: " zaehler; }
  • Wie Sie das Programm starten können? Nach Studium des folgenden Abschnitts werden Sie es wissen...