Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig. Show
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:Inhaltsverzeichnis
Ein Werkzeug mit ähnlichen Aufgabengebieten findet man bei sed, während die Programmiersprache Perl durch ihre unzähligen Zusatzmodule praktisch unbegrenzt erweitert werden kann. Installation¶Der Interpreter ist in der Standardinstallation von Ubuntu bereits enthalten, kann ansonsten aber über das folgende Paket installiert [1] werden:
Befehl zum Installieren der Pakete: sudo apt-get install mawk Oder mit apturl installieren, Link: apt://mawk Darüber hinaus existieren noch die Pakete gawk (GNU-Implementation, englische Dokumentation im info-Format in gawk-doc) und original-awk. Nawk, das „neue awk“, wird standardmäßig von Ubuntu geliefert. Erste Schritte¶awk-Programme bestehen immer aus Kombinationen von Anweisungsblöcken und zugehörigen Bedingungen, welche für die aktuelle Eingabezeile erfüllt sein müssen, damit der Anweisungsblock ausgeführt wird. Wird keine Bedingung angegeben, wird die Anweisung für jede Eingabezeile ausgeführt. Wird nur die Bedingung, jedoch keine Anweisung angegeben, so wird die Standardanweisung ausgeführt, welche die Eingabezeile ausgibt. Anweisungsblöcke werden immer in geschweiften Klammern zusammengefasst. Nach Konvention enden Dateinamen für awk-Skripte optional mit .awk. Allgemeine Syntax mit Bedingung und Anweisung: Bedingung { Anweisungen } Bedingungen¶Eine übliche Bedingung ist der Vergleich mit einem regulären Ausdruck:. Dies wird wie folgt geschrieben: /regulärer Ausdruck/ # Kurzform für Vergleich mit der aktuellen Zeile $0 ~ /regulärer Ausdruck/ # Langform /^Hallo / # Beispiel: alle Zeilen, die mit "Hallo " beginnen /[0-9]+\.[0-9]+/ # komplexeres Beispiel: alle Zeilen, die eine Dezimalzahl mit "." als Trennzeichen enthalten (z.B. 3.45) Man kann auch andere Vergleiche durchführen. Statt Ausdruck ~ /regulärer Ausdruck/ # allgemein $1 ~ /^Hallo$/ # Beispiel: vergleicht das erste Feld der Zeile (siehe "Variablen"); (fast) identisch zum 1. Beispiel oben Schließlich kann man auch Vergleiche ohne reguläre Ausdrücke durchführen: Ausdruck Operator Ausdruck # allgemein $1 == "Hallo" # Beispiel: wie "$1 ~ /^Hallo$/" $1 > 20 # Beispiel: prüft, ob der Wert im ersten Feld größer als 20 ist Mehrere Bedingungen lassen sich auch mit Spezielle Bedingungen¶ Es gibt die besonderen Bedingungen Das Beispiel wertet die Datei /etc/hosts aus: awk ' BEGIN { print "Die IP Adresse von localhost ist: " } $2 == "localhost" { print $1 } END { print "Das war die IP Adresse von localhost."} ' /etc/hosts Ergebnis: Die IP Adresse von localhost ist: 127.0.0.1 Das war die IP Adresse von localhost. Variablen¶ awk setzt beim Einlesen jeder Zeile bestimmte Variablen. Ausführung auf der Kommandozeile¶ awk-Skripte können auf der Kommandozeile ausgeführt werden. Eingabedaten werden entweder über den Standardeingabekanal gelesen oder aus einer oder mehreren angegebenen Dateien. Das Skript kann dabei in einfachen Hochkomma direkt hinter dem awk-Aufruf stehen. Wenn
man zum Beispiel die IP-Adresse des awk '$2 == "localhost" { print $1 }' /etc/hosts Ergebnis: 127.0.0.1 awk kann die Eingaben auch vom Standardeingabekanal lesen: awk '$2 == "localhost" { print $1 }' < /etc/hosts Ausführung als Skriptdatei¶Längere awk-Skripte werden auf der Kommandozeile schnell unübersichtlich. Daher können Skripte auch als Datei gespeichert werden. Auf der Kommandozeile können diese dann mit ausgeführt werden. Wenn also das Beispielskript in der Datei localhostip.awk gespeichert wäre, würde der Aufruf so erfolgen: awk -f localhostip.awk /etc/hosts Alternativ kann man den Befehl
und dann dem Skript Ausführungsrechte geben: chmod a+x localhostip.awk Der Aufruf erfolgt mit: ./localhostip.awk /etc/hosts Variablen¶Variablen müssen in awk-Skripten nicht speziell initialisiert werden. Es kann jederzeit einer neuen Variable ein Wert zugewiesen werden. Builtin-Variablen¶awk belegt einige Variablen automatisch mit Werten. Diese können im laufenden Skript abgefragt und verändert werden, wobei Änderungen nicht bei allen Variablen sinnvoll sind. Einige davon zeigt die folgende Tabelle:
Variablen übergeben¶ Oft ist es sinnvoll, dem awk-Skript eigene Variablen zu übergeben, welche dann im Skript verwendet werden können. Mit dem Aufrufparameter awk -v pre="IP von localhost ist:" -v post="Das war die IP von localhost." ' BEGIN { print pre } $2 == "localhost" { print $1 } END { print post} ' /etc/hosts Ergebnis: IP Adresse von localhost ist: 127.0.0.1 Das war die IP von localhost Programmsteuerung¶Auch awk hat einige Funktionen zur Programmsteuerung, die wahrscheinlich schon von anderen Programmiersprachen bekannt sind. Bedingungen¶ Mit if (bedingung) { # Anweisungen wenn Bedingung erfüllt } else if (bedingung2) { # Anweisungen wenn Bedingung 2 erfüllt } else { # Anweisungen wenn Bedingung nicht erfüllt } Das Beispiel überprüft, ob eine Zahl
Schleifen¶Schleifen dienen der Wiederholung von Anweisungen. while-Schleife¶ In der while (Bedingung) { Anweisung(en) } Beispiel (gibt die Zahlen 1-9 aus):
do-while-Schleife¶ Die do { Anweisung(en) } while (Bedingung) Beispiel (gibt die Zahl 10 einmal aus, obwohl die Bedingung nicht erfüllt ist):
for-Schleife¶ Die for-Schleife ist immer dann hilfreich, wenn eine genau festgelegte Anzahl an Ausführungen des Schleifenkörpers gewünscht wird. Die Schleife besteht aus drei Teilen: Einer Initialisierung, einer Bedingung und einer Inkrement-Anweisung. Der Schleifenkörper wird ausgeführt, wenn die Bedingung erfüllt ist. Die Überprüfung der Bedingung
findet bei der for(Initialisierung; Bedingung; Inkrement) { Anweisung(en) } Beispiel (gibt die Zahlen 1-9 aus):
break und continue¶ Mit den Befehlen next, nextfile und exit¶ Mit Anweisungen¶Hinter einer Anweisung kann ein Semikolon eingefügt werden. Dies ist immer notwendig, wenn mehrere Anweisungen auf einer Zeile stehen. Hier sollen noch ein paar weitere Anweisungen vorgestellt werden. Mehr findet man in der Manpage von awk unter "8. Built-in functions" und "9. Input and output".
Beispiele¶Beispiele für awk-Skripte findet man u.a. in der Manpage von awk unter "EXAMPLES". Ein paar sollen hier noch aufgeführt werden. Spalten ausgeben¶awk wird oft verwendet, um eine bestimmte Spalte (hier: die erste) auszugeben. Eine ähnliche Funktion hat cut. Werden die Spalten nicht durch Leerzeichen getrennt, kann man die Variable awk -F Neuer-FS-Wert '{ print $1 }' Summe bilden¶Dieses Skript erwartet Zeilen, die jeweils genau eine Zahl enthalten, und gibt die Anzahl der Zeilen, die Summe aller Zahlen sowie den Durchschnitt aus:
Links¶Intern¶
Extern¶
Diese Revision wurde am 26. September 2022 08:09 von kB erstellt. |