|
|
awk
Das Programm Wie das aber bei flexiblen und leistungsstarken Programmen so ist, fühlt man sich auch leicht von der Komplexität der Möglichkeiten erschlagen. Dennoch lohnt sich ein Blick auf dieses Programm, da es bestimmte Probleme mit erstaunlich wenig Aufwand lösen kann.
awk '/Willemer/ {print $3}' telefon Dieser Befehl gibt für alle Zeilen der Datei telefon, in denen die Zeichenfolge Willemer steht, die dritte Spalte aus. Die Datei telefon ist eine einfache Textdatei, in der Name, Vorname und Telefonnummer in jeder Zeile stehen. Im Folgenden sehen Sie einen kurzen Ausschnitt:
Müller Anton 0987-6543 Schmidt Erwin 01234-5678 Willemer Arnold 04632-110
Das Hochkomma
Im Allgemeinen bestehen die Argumente von awk aus mehr als einem Wort. Da die
Shell durch Leerzeichen getrennte Eingaben dem Programm separat übergibt,
wird ein Argument, das aus mehreren Wörtern besteht, in Anführungszeichen oder
in Hochkommata eingeschlossen. Diese sind auch hilfreich, wenn das Kommando
über mehrere Zeilen geht, da die Shell den Befehl erst als abgeschlossen
ansieht, wenn das zweite Hochkomma erscheint. Man verwendet übrigens
bei
Selektion: Auswahl von ZeilenDas Kommando zur Selektion wird gegeben, indem der Suchstring in Schrägstriche gesetzt wird. Unter einer Selektion versteht man die Auswahl der Zeilen einer Tabelle.
awk /Willemer/ telefon Alle Zeilen mit der Zeichenfolge Willemer in der Datei telefon werden ausgegeben. Wird kein Suchstring angegeben, werden alle Zeilen angezeigt. Im Suchbegriff können reguläre Ausdrücke verwendet werden (siehe S. regexp). Würde die Datei telefon alle Telefonnummern enthalten, würde nach der Ausführung des Befehls meine gesamte Verwandtschaft einträchtig beisammen stehen, wie das im Leben vielleicht nicht der Fall wäre. Sind Computer nicht etwas Wunderbares?
Projektion: Auswahl von Spalten
Zur Projektion muss die Spalte angegeben werden und ein Kommando, was mit ihr
passieren soll. Als Spaltentrenner gilt jede beliebige Kombination von
Tabulatorzeichen oder Leerzeichen. Das einfachste Kommando ist die Ausgabe
mittels
awk '{print $3}' Es ist möglich, mehrere Befehle in einer geschweiften Klammer zu setzen. Dabei sind die Kommandos jeweils durch ein Semikolon zu trennen.
Kombination von KommandosDie Kombination beider Optionen ist möglich.
awk '/Willemer/ {print $3}' telefon Das bereits bekannte Beispiel selektiert also nach der Zeichenfolge Willemer und führt in allen Zeilen, auf die die Selektion zutrifft, den Inhalt der geschweiften Klammer aus. Dieser besagt, dass die dritte Spalte ausgegeben werden soll.
Variablen
Innerhalb des
Auch die Shell kennt Variablen, wie später näher erläutert wird.
Im Gegensatz zu den Umgebungsvariablen der Shell wird den Variablen von
Start-, Standard- und EndanweisungenMan kann drei Typen von Anweisungen unterscheiden. Die Standardanweisung wurde bereits vorgestellt. Dieser Typ wird auf jede selektierte Zeile angewandt. Daneben gibt es noch die Startanweisung, die genau einmal vor der ersten Verarbeitung ausgef"uhrt wird und der man das Schlüsselwort BEGIN voranstellt. Die Endanweisung wird durch das Schlüsselwort END eingeleitet. Hier ein Beispiel:
gaston> awk 'BEGIN{print"Wir zählen Tage!"; anzahl=0} {print $1;anzahl++} END{print "Das waren " anzahl " Tage"}' tage Wir zählen Tage! montag dienstag mittwoch donnerstag freitag samstag sonntag Das waren 7 Tage gaston>
Die Datei tage enthält in der ersten Spalte die Wochentage.
Bei BEGIN wird die lokale Variable
Ein weiteres Beispiel soll die Summe aller Dateilängen mit der Endung
gnt
bilden. In diesem Fall wird
ls -l *.gnt | awk '{sum+=$5}END{print sum}'
Die Suche nach gnt könnte natürlich auch von
ls -l | awk '/gnt/ {sum+=$5} END{print sum}' Der Unterschied besteht darin, dass in diesem Fall Zeilen, in denen irgendwo gnt (beispielsweise im Gruppennamen) vorkommt, auch mitgerechnet werden.
Eingebaute Funktionen
[awk-Funktionen]L|L
Funktion & Wirkung
Ausführung von Programmdateien
Mit den Variablen und Befehlen kann man komplexe Programme erzeugen. Damit
diese nicht jedes Mal neu eingegeben werden m"ussen, kann man Dateien mit den
auszuführenden Aktionen schreiben. Der Dateiname wird
awk -f awkprg
In diesem Beispiel stehen in der Datei awkprg die Befehle, die durch
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|