7.4.2017 Seite 2 − Mit awk lassen sich Dateien nach Textmustern durchsuchen und wenn diese erkannt werden, verschiedene Aktionen ausführen (ersetzen, streichen, merken). − Syntax entspricht in groben Zügen der Syntax von C − awk wird vorrangig in der Systemprogrammierung zum Bearbeiten von Konfigurationsdateien eingesetzt. Weiterhin ist awk für die einmalige komplexe Modifikation von großen Dateien geeignet. − awk ist langsam!!!!! Wenn man häufig große Datenbestände mit awk durchmustern will, sollte man das awk−Programm in ein C−Programm umformen. − awk−Programme sind in der Regel kurz!!!!! Allgemeines: j−p bell 8.Awk Seite 1 7.4.2017 1977 von Alfred V. Aho, J. Weinberger, Brian W. Kernighan entwickelt 1985 grundlegend verbessert 1990 aufgenommen in POSIX 1003.2 Command Language And Utilities Standard 1992 gawk POSIX−konform mit Erweiterungen!!! 1995 verbesserte Version von gawk 1998 verbesserte Version von gawk (POSIX 1003.2 Regel 11.2) Historisches: j−p bell 8. awk − Alfred V. Aho, J. Weinberger, Brian W. Kernighan − − − ========================================================= Ein Filter oder eine leistungsfähige Programmiersprache? Werkzeuge ========= Betriebssysteme − Werkzeuge und UNIX−Schnittstelle ================================================== 8.Awk 8.Awk 7.4.2017 8.Awk <Aktion> } <Aktion> } j−p bell Seite 3 Seite 4 7.4.2017 <print−Anweisung> ::= print [<Ausdruck> {"," <Ausdruck>}] Ausgabe unformatiert auf die Standardausgabe. Zwischen den Ausdrücke wird ein Leerzeichen ausgegeben. Eine leere print−Anweisung bewirkt die Ausgabe der Eingabe− zeile. a8,a9 Built−in−Variable: NF − Anzahl der Eingabefelder in der aktuellen Zeile NR − Aktuelle Zeilennummer a10 <awk−Programm> ::= <Pattern> ["{" <Folge von Anweisung> "}"] | <awk−Programm> <NL> <Pattern> ["{"<Folge von Anweisung>"}"] <Folge von Anweisungen> ::= <Anweisung> { "<NL>" <Anweisung> } <Anweisung> ::= <print−Anweisung> | ... <Pattern> ::= <arithmetische Vergleiche> | <Textvergleiche> | "BEGIN" | "END" | ... oder formal (unvollständig): <Muster> { <Muster> { ..... Folge von Anweisungen der Form: Einfache awk−Programme −−−−−−−−−−−−−−−−−−−−−− awk−Programm: j−p bell − Feldseparator ist ein Zeichen. Dieses Zeichen definiert das Trennzeichen zwischen zwei Eingabefeldern in der Eingabedatei. Standard ist das Leerzeichen. a1,a2,a3,a4,a5 −f <awk−Programm−File> − File, das ein awk−Programm enthält a6 <Datei> − Name der Datei, die bearbeitet werden soll. Wird keine Datei angegeben, werden die Daten von der Standardeingabe gelesen. a7 −F<Feldseparator> − vollständiges awk−Programm, kann sich über mehrere Zeilen erstrecken. <NL> sollte durch ’\’ maskiert sein. [−F<Feldseparator>] ’<awk−Programm>’ {<Datei>} [−F<Feldseparator>] −f <awk−Programm−File> {<Datei>} <awk−Programm> awk awk Aufruf von awk: Arbeitsweise von awk: awk liest die Eingabedatei zeilenweise. Jede Eingabezeile wird in mehrere Eingabefelder zerlegt. Die Eingabefelder werden mit $1, $2, $3, ... bezeichnet. $0 bezeichnet die Eingabezeile. Danach wird für jede Zeile das awk−Programm abgearbeitet und die entsprechenden Anweisungen ausgeführt. awk−Einführung −−−−−−−−−−−−−− 8.Awk − "==" Nur Strings können verglichen werden. 7.4.2017 − Die zum END−Pattern gehörende Folge von Anweisungen wird einmal nach dem Lesen der letzten Zeile der letzten Eingabedatei abgearbeitet. Achtung: END muß wirklich groß geschrieben werden!!!! 7.4.2017 Seite 5 j−p bell "#" leitet einen Kommentar ein, der bis zum Zeilenende reicht. Seite 6 a17 Leerzeichen und Tabulatoren können zur Strukturierung des awk−Programms benutzt werden. Ein ";" am Ende einer einzelnen Anweisung ist nicht schädlich. Wird nach einem Pattern keine <Folge von Anweisungen> angegeben, erfolgt die Ausgabe der Zeile, auf die das Pattern passt auf Standardausgabe. a16 Anweisungen werden durch ";" getrennt, wenn sie auf einer Zeile stehen. Das Pattern und die zugehörige "{" müssen immer auf der selben Zeile stehen. | <Pattern> [ "{" <Folge von Anweisung> "}" ] | <Funktionsdefinition> | <awk−Programm> "<NL>" <Pattern> [ "{" <Folge von Anweisung> "}" ] | <awk−Programm> "<NL>" <Funktionsdefinition> 8.Awk a15 <Folge von Anweisungen> ::= <Anweisung> | "#" [<Zeichenkette>] "<NL>" | <Folge von Anweisungen> { "<NL>" <Anweisung> } <Folge von Anweisungen> { ";" <Anweisung> } <awk−Programm> ::= Die Sprache AWK −−−−−−−−−−−−−−− j−p bell <string> string> Verkettungsoperationen für Strings: <arithmetischer Ausdruck> := <variable> | <Konstante> | <arithmetischer Ausdruck> <Operator> <arithmetischer Ausdruck> Variable sind möglich. Werden beim Auftreten definiert. Arithmetische Variable werden mit Null initialisiert. String−Variable werden mit der leeren Zeichenkette initialisiert. a11,a12 a13,a14 arithmetische Operationen: +, −, * , / END−Pattern BEGIN−Pattern − Die zum BEGIN−Pattern gehörende Folge von Anweisungen wird einmal vor dem Lesen der ersten Zeile der Eingabe− datei abgearbeitet. Initialisierung!!!! Achtung: BEGIN muß wirklich groß geschrieben werden!!!! <Textvergleich> <arithmetische Vergleiche> − "<" und ">" Arithmetische Ausdrücke können verglichen werden. "END" ::= <numerischer Ausdruck> | <String−Ausdruck> kleiner als kleiner gleich gleich ungleich größer als größer gleich rechter String im linken String enthalten rechter String nicht im linken String enthalten Bedeutung s s n,s n,s n,s n,s n,s n,s Type j−p bell <regulärer Ausdruck> − siehe oben Wie reguläre Ausdrücke: Metazeichen: \ ^ $ . [ ] | ( ) * + ? Operatoren: A | B (oder), AB (A gefolgt von B) A* (0 bis n−mal A), A+ (1 bis n−mal A), A? (0 oder 1−mal A) Klassen von Zeichen: [a−zA−z], [^a−zA−Z] a20,a21 Seite 8 7.4.2017 Tricks: Anhängen eines Nullstrings an eine Zahl bewirkt die Konvertierung der Zahl zu einem String. Addieren einer Null zu einem String bewirkt die Konvertierung eines Strings zu einer Zahl. a18,a19 !~ Vergleichs− operator < <= == != > >= ~ Vergleichsoperatoren in Ausdrücken: 8.Awk Seite 7 Jeder Ausdruck kann als Pattern benutzt werden. Ist der Wert des Ausdrucks ungleich Null, wird der Anweisungsteil ausgeführt, andernfalls nicht. Typische "Ausdrucks−Pattern" sind Vergleiche (arithmetische und string). Arithmetische Vergleiche werden ausgeführt, wenn beide Operanden arithmetisch sind, andernfalls wird ein String−Vergleich ausgeführt. <Ausdruck> Die zum END−Pattern gehörende Folge von Anweisungen wird einmal nach dem Lesen der letzten Zeile des letzten Eingabefiles abgearbeitet. Der Anweisungsteil darf nicht leer sein!!!! <END−Pattern> ::= j−p bell "BEGIN" 7.4.2017 Die zum BEGIN−Pattern gehörende Folge von Anweisungen wird einmal vor dem Lesen der ersten Zeile des ersten Eingabefiles abgearbeitet Der Anweisungsteil darf nicht leer sein!!!! <BEGIN−Pattern> ::= <Pattern> ::= <BEGIN−Pattern> | <END−Pattern> | <Ausdruck> | "/"<regulärer Ausdruck>"/" | <zusammengesetztes Pattern> | <Bereich> 8.Awk j−p bell ++, −− ++, −− <, <=, ==, !=, >=, > ~, !~ ?: Präfix−Operatoren: Postfix−Operatoren: Relations−Operatoren: Match−Operatoren: Bediengungsoperator: − y=z; z=z−1; 7.4.2017 Seite 10 (a?b:c − wenn a dann b sonst c) y = z−− z=z+1; y=z; =, +=, −=, *=, /=, %=, ^= a+=3 − a = a + 3 Zuweisungsoperatoren: − ^ Potenz−Operator: y = ++z *, /, % Multiplikations−Operatoren: a zum Quadrat +, − Additions−Operatoren: a^2 +, − Vorzeichen−Operatoren: 8.Awk Seite 9 <Ausdrücke> | <print−Anweisung> | <printf−Anweisung> | <getline−Anweisung> | <if−Anweisung> | <for−Anweisung> | <for−array−Anweisung> | <do−Anweisung> | <while−Anweisung> | <break−Anweisung> | <continue−Anweisung> | <next−Anweisung> | <exit−Anweisung> | "{" <Anweisung> { <Anweisung> }"}" <awk−Operatoren> − Übersicht <Ausdrücke> j−p bell a22,a23 7.4.2017 Hierdurch wird ein Bereich festgelegt, der mit der Zeile beginnt, für die das erste Pattern paßt und endet mit der Zeile, für die das zweite Pattern paßt, bzw. bis zum Fileende. Die zugehörigen Anweisungen werden für alle Zeilen des Bereichs ausgeführt. a24,a25 ::= <Pattern> "," <Pattern> <Anweisung> ::= <Bereich> 8.Awk <Pattern> || <Pattern> | <Pattern> && <Pattern> | "!" <Pattern> | "(" <Pattern> ")" Zusammensetzen von mehreren Pattern zu einem. || − oder && − und ! − Verneinung ( .. ) − Klammerung <zusammengesetztes Pattern>::= ( ) in || && ! − − − − : Zeichenkette in Doppelapostrophs geklammert z.B. "Passwd", "\npasswd\n" j−p bell j−p bell − Anzahl der Argumente − Feld der Argumente − Feld der Umgebungsvariablen − Filename des momentan bearbeiteten Feldes − Zeilennummer des aktuellen Files − Feldseparator − Anzahl der Felder in der aktuellen Zeile − Anzahl der gelesenen Zeilen insgesammt − Ausgabeformat für Zahlen − "%.6g" − Trennzeichen für Ausgabefelder − " " − Trennzeichen für Ausgabezeilen − "\n" − Trennzeich für Eingabezeile − "\n" ARGC ARGV ENVIRON FILENAME FNR FS NF NR OFMT OFS ORS RS <Built−in−Variable> : von awk vordefinierte Variable: 8.Awk Seite 12 a26 7.4.2017 Seite 11 <Normale−Variable> : vom Anwender definierte Variable, Bezeichner aus Buchstaben, Unterstrichen und Ziffern bestehen mit Buchstaben oder Unterstrich beginnend. z.B. i, i_, i_23 <Variable>::=<Normale−Variable> | <Built−in−Variable> | <Felder> <numerische−Konstante>: ganze Zahlen, z.B. 123, 1234,4711 Gleitkommanzahlen, z.B. 3.1415, 1.0e−6, 1E−6 <String−Konstante> 7.4.2017 n in array − liefert True, wenn array[n] existiert logisches oder logisches und logische Verneinung <Konstante>::=<String−Konstante> | <numerische Konstante> Klammerung: Enthaltens−Operator−Array: Logische Operatoren: 8.Awk j−p bell a28 a27 7.4.2017 7.4.2017 Seite 14 a29 print Ausdruck1, Ausdruck2, ... >> Ausgabefile Anfügen der Ausdrücke Ausdruck1, Ausdruck2, ... in das Ausgabefile. Zwischen den einzelnen Ausdrücken wird OFS (Output Field Separator) geschrieben. Nach dem letzten Ausdruck wird ORS (Output Record Separator geschrieben. Die neuen Daten werden an den Inhalt des Ausgabefiles angefügt. a30 print Ausdruck1, Ausdruck2, ... > Ausgabefile Ausgabe der Ausdrücke Ausdruck1, Ausdruck2, ... in das Ausgabefile. Zwischen den einzelnen Ausdrücken wird OFS (Output Field Separator) geschrieben. Nach dem letzten Ausdruck wird ORS (Output Record Separator geschrieben. Der alte Inhalt des Ausgabefiles wird überschrieben. print Ausdruck1, Ausdruck2, ... Ausgabe der Ausdrücke Ausdruck1, Ausdruck2, ... auf die Standardausgabe. Zwischen den einzelnen Ausdrücken wird OFS (Output Field Separator) geschrieben. Nach dem letzten Ausdruck wird ORS (Output Record Separator geschrieben. print Ausgabe der Eingabezeile auf die Standardausgabe entspricht "print $0" {<Ausdruck1>} | {<Ausdruck1>} ">" <Ausgabefile> | {<Ausdruck1>} ">>" <Ausgabefile> | {<Ausdruck1>} "|" <Kommando> 8.Awk Seite 13 delete−Operation für Felder: delete feld[index] − das "indexte" Element des Feldes feld wird gelöscht. in−Operator für for−Anweisung: Ermittelt alle Indizes eines Feldes. Reihefolge ist Implementationsabhängig. siehe Beispiel <print−Anweisung>::= "print" "print" "print" "print" j−p bell die Eingabezeile gesammte Eingabezeile erstes Feldelement zweite Feldelement .... Nutzerdefinierte Felder: awk unterstützt assoziative Felder, die nicht explizite definiert werden müssen. Sie sind bei der ersten Benutzung mit Null oder "" initialisiert. z.B. feld["drei"] = 3; feld["vier"] = 4; feldn[3] = 3; feldn[4] = 4; felda[3] = "drei"; felda[4] = "vier"; $−Feld: bezeichnet $0 − $1 − $2 − <Felder>: 8.Awk j−p bell "("<format> "("<format> "("<format> "("<format> {,<Ausdruck>} {,<Ausdruck>} {,<Ausdruck>} {,<Ausdruck>} ")" ")" ")" ")" 7.4.2017 Seite 16 a32 printf (format,Ausdruck1, Ausdruck2, ... ) Ausgabe der Ausdrücke Ausdruck1, Ausdruck2, ... unter Berücksichtigung der Formatelemente in format auf die Standardausgabe. Es werden keine OFS und ORS geschrieben. U − Umwandlungszeichen: c − ASCII−Zeichen d − Dezimalzahl mit Vorzeichen e − Geitkommanzahl der form [−]d.dddddE[+−]dd f − Geitkommanzahl der form [−]ddd.dddddd g − die kürzere Darstellung von e oder f Umwandlung o − vorzeichenlose Oktalzahl s − String x − vorzeichenlose Hexadezimalzahl % − "%"−Zeichen F − Formatierungszeiche: "−" − linksbündige Justierung W − Weite: Mindestanzahl der auszugebenden Zeichen G − Genauigkeit: für Strings − Maximalzahl der auszugebenden Zeichen für Zahlen − Anzahl der Stellen nach dem Komma Der Wert wird als .<Ziffern> ausgegeben. %FWGU Ein Formatsteuerungselement hat folgenden Aufbau: 8.Awk Seite 15 | ">" <Ausgabefile> | ">>" <Ausgabefile> | "|" <Kommando> Formatgesteuerte Ausgabe von Ausdrücken. Die Formate sind ähnlich wie bei C. Der format−String besteht aus Zeichen ungleich "%", die unverändert ausgegeben werden und Formatsteuerungselemente. Es folgen die für den format−String notwendigen Ausdrücke. <printf−Anweisung>::= "printf" "printf" "printf" "printf" printf−Anweisung j−p bell 7.4.2017 print Ausdruck1, Ausdruck2, ... | kommando Ausgabe der Ausdrücke Ausdruck1, Ausdruck2, ... auf die Standeingabe des Kommandos kommando. Zwischen den einzelnen Ausdrücken wird OFS (Output Field Separator) geschrieben. Nach dem letzten Ausdruck wird ORS (Output Record Separator geschrieben. a31 8.Awk j−p bell 8.Awk 7.4.2017 Seite 17 7.4.2017 Seite 18 getline−Anweisung wird benutzt, um von der momentanen Eingabe, von einem File oder von der Standardausgabe eines Kommandos ein Zeile zu lesen. Die Zeile kann dabei in den Standardeingabepuffer oder in eine Variable gelesen werden. Wird in den Standardeingabepuffer gelesen, wird die Zeile wie gewohnt in Felder aufgeteilt. Wird die Zeile in eine Variable gelesen, so findet keine Aufteilung statt. Die Variablen NR und FNR werden jeweils weitergezählt. Die Variable NF wird nur bei der Eingabe in den Standardeingabepuffer gefüllt. Rückkehrwert: 1 − eine Zeile gelesen 0 − Dateiende erreicht −1 − Fehler beim Lesen <getline−Anweisung>::= "getline" | "getline" <Variable> | "getline" "<" <Dateiname> | "getline" <Variable> "<" <Dateiname> | <Kommando> "|" "getline" | <Kommando> "|" "getline" <Variable> getline−Anweisung j−p bell abgebrochen werden. close(Ausgabefile) bzw. close(Kommando) Sowohl bei print als auch bei printf kann die Verbindung zur Ausgabefile bzw. zum Kommando durch: printf (format,Ausdruck1, Ausdruck2, ... ) | Kommando Ausgabe der Ausdrücke Ausdruck1, Ausdruck2, ... unter Berücksichtigung der Formatelemente in format auf die Standeingabe des Kommandos kommando. Es werden keine OFS und ORS geschrieben. printf (format,Ausdruck1, Ausdruck2, ... ) >> Ausgabefile Anfügen der Ausdrücke Ausdruck1, Ausdruck2, ... unter Berücksichtigung der Formatelemente in format in das Ausgabefile. Es werden keine OFS und ORS geschrieben. Die neuen Daten werden an den Inhalt des Ausgabefiles angefügt. printf (format,Ausdruck1, Ausdruck2, ... ) > Ausgabefile Ausgabe der Ausdrücke Ausdruck1, Ausdruck2, ... unter Berücksichtigung der Formatelemente in format in das Ausgabefile. Es werden keine OFS und ORS geschrieben. Der alte Inhalt des Ausgabefiles wird überschrieben. 8.Awk Durch die Klammerung in geschweiften Klammern können mehrere Anweisungen zu einer Anweisung zusammengefaßt werden. Dies wird für die nachfolgenden komplexen Anweisungen benötigt. j−p bell Funktionsweise: Der Variablen wird nacheinander die existierenden Indizes des Feldes zugewiesen. Jedesmal wird anschließend die Anweisung abgearbeitet. Die Reihenfolge des Indizes ist unbestimmt (implementations−abhängig). <for−array−Anweisung>::= "for" "(" <Variable> "in" <Feld> ")" <Anweisung> for−array−Anweisung Funktionsweise: 1. <Ausdruck 1> wird berechnet. 2. <Ausdruck 2> wird berechnet. Ist der Wert des Ausdrucks ungleich Null (True) wird bei 3. fortgesetzt, sonst wird die for−Anweisung beendet. 3. Abarbeitung des Anweisungsteil 4. Berechnung des <Ausdruck 3> und fortsetzen bei 2. Bemerkung zur Syntax: Für <Anweisung> darf genau eine Anweisung stehen. Diese darf auf einer neuen Zeile stehen. Sollen mehrere Anweisungen auf der Position von <Anweisung> abgearbeitet werden, so sind diese zu klammern (siehe oben). <for−Anweisung>::="for" "(" <Ausdruck 1> ";" <Ausdruck 2> ";" <Ausdruck 3> ")" <Anweisung> for−Anweisung 8.Awk Funktionsweise: Der Ausdruck wird ausgewertet. Ist der Wert des Ausdrucks ungleich Null oder ein Nicht−Null−String, so wird die erste Anweisung abgearbeitet, andernfalls wird die Anweisung nach dem "else"−Teil abgearbeitet, falls dieser vorhanden ist. Bemerkung zur Syntax: Für <Anweisung 1> und <Anweisung 2> darf genau eine Anweisung stehen. Diese kann auch auf einer neuen Zeile stehen. Stehen <Anweisung 1> und der "else"−Teil auf der selben Zeile, müssen sie durch ein ";" getrennt werden. Sollen mehrere Anweisungen auf der Position von <Anweisung 1> bzw. <Anweisung 2> abgearbeitet werden, so sind diese zu klammern (siehe oben). <if−Anweisung>::= "if" "(" <Ausdruck> ")" <Anweisung 1> [ "else" <Anweisung 2> ] if−Anweisung j−p bell 8.Awk <Anweisung>::="{" <Anweisung> { <Anweisung> }"}"| .... Klammerung von Anweisungen: Seite 20 a28 a27 7.4.2017 Seite 19 a33,a34 7.4.2017 a35 7.4.2017 Seite 21 a35 a35 7.4.2017 Seite 22 Funktionsweise: Die continue−Anweisung bewirkt das Beenden des aktuellen Schleifendurchlaufs bei einer Schleifenanweisung (for−Anweisung, while−Anweisung, do−Anweisung). Anschließend werden die notwendigen Ausdrücke berechnet und eventuell mit dem nächsten Schleifendurchlauf fortgesetzt. a36 <continue−Anweisung>::= "continue" continue−Anweisung j−p bell 8.Awk Funktionsweise: Sofortiges Verlassen der aktuellen Schleifenanweisung (for−Anweisung, while−Anweisung, do−Anweisung). Bei mehrfach ineinander geschachtelten Schleifenanweisungen wird nur die innerste Schleife verlassen. <break−Anweisung>::="break" break−Anweisung j−p bell Funktionsweise: 1. Berechnung des Ausdrucks. 2. Wenn der Ausdruck ungleich Null ist (True), wird 3. ausgeführt, sonst wird die while−Anweisung beendet. 3. Abarbeiten der Anweisung und fortfahren bei 1. <while−Anweisung>::="while" "("<Ausdruck>")" <Anweisung> while−Anweisung Funktionsweise: 1. Abarbeiten der Anweisung. 2. Berechnung des Ausdrucks. 3. Wenn der Ausdruck ungleich Null ist (True), wird bei 1. fortgesetzt, sonst wird die do−Anweisung beendet. <do−Anweisung>::="do" <Anweisung> "while" "("<Ausdruck>")" do−Anweisung 8.Awk 8.Awk j−p bell − Arcustangens von x/y − Cosinus von x im Bogenmaß − Sinus von x im Bogenmaß − Exponential−Funktion e hoch x − natürlicher Logarithmus von x: ln x − ganzzahliger Anteil von x − Quadratwurzel von x − Zufallszahl im Intervall von 0 bis 1 − neuer Startwert x für den Zufallszahlen− generator atan2(x,y) cos(x) sin(x) exp(x) log(x) int(x) sqrt(x) rand() srand(x) arithmetische built−in−Funktionen In awk vordefinierte Funktionen. Werden von awk mitgeliefert. Die Zahl ist unterschiedlich. built−in−Funktionen −−−−−−−−−−−−−−−−−−− j−p bell Funktionsweise: Beenden des awk−Programms. Befindet sich die exit−Anweisung in einem END−Anweisungs−Teil, wird die das awk−Programm sofort beendet. In allen anderen Teilen eines awk−Programms bewirkt die exit−Anweisung die sofortige Verzweigung zum END−Anweisungs−Teil, wenn dieser vorhanden ist, sonst ebenfalls die sofortige Beendigung des awk−Programms. Ist ein Ausdruck in der exit−Anweisung spezifiziert, wird dieser als Rückkehrkode von awk benutzt. <exit−Anweisung>::="exit" [<Ausdruck>] exit−Anweisung Funktionsweise: Es wird sofort die nächste Eingabezeile gelesen und mit der Auswertung des ersten Patterns des awk−Programms fortgesetzt. Bei EOF wird awk beendet. <next−Anweisung>::="next" next−Anweisung 8.Awk Seite 24 a40 7.4.2017 Seite 23 a38,a39 a37 7.4.2017 j−p bell j−p bell − prüft, ob der String s1 einen Teilstring enthält, der mit re "matchet". Rückkehrwert: Anfangsposition des Teilstrings oder 0 − Zerlegt den String s1 entsprechend dem Trennzeichen tr in ein Feld ar. Rückkehrwert: Anzahl der Feldelemente match(s1,re) split(s1,ar,tr) 7.4.2017 − wie split(s1,ar,tr), aber als Trennzeichen wird FS genommen. Rückkehrwert: Anzahl der Feldelemente − Konvertieren der Großbuchstaben in Kleibuchstaben s1 bleibt unverändert Rückkehrwert: Konvertierte String s1 − Konvertieren der Kleibuchstaben in Großbuchstaben s1 bleibt unverändert Rückkehrwert: Konvertierte String s1 tolower(s1) toupper(s1) Seite 26 − liefert ab Position n1 den Rest des Strings s1 Rückkehrwert: Rest des Strings ab Position n1 substr(s1,n1) a41 − wie sub(re,s1,s2), aber in $0 Rückkehrwert: Anzahl der Ersetzungen sub(re,s1) substr(s1,n1,n2) − schneide aus String s1 ab der Position n1 einen String der Länge n2 aus Rückkehrwert: Ausgeschnittene Teilstring − Substitution des am weitesten links stehenden längsten Strings re durch den String s1 im String s2 Rückkehrwert: Anzahl der Ersetzungen sub(re,s1,s2) sprintf(fmt,format−liste) − Formatierte Ausgabe Rückkehrwert: Ergebnis der Ausgabe als String split(s1,ar) − Berechnet die Länge von s1 Rückkehrwert: Länge des Strings s1 length(s1) 8.Awk − Sucht das erste Auftreten des Strings s2 in s1 Rückkehrwert: Anfangsposition von s2 in s1 index(s1,s2) Seite 25 − wie gsub, aber anstelle von s2 wird $0 benutzt Rückkehrwert: Anzahl der Ersetzungen gsub(re,s1) ar − Feld − Ersetzt im String s2 den regulären Ausdruck re durch den String s1 Rückkehrwert: Anzahl der Ersetzungen s1,s2 − Strings n1,n2 − ganze Zahlen 7.4.2017 gsub(re,s1,s2) re − regulärer Ausdruck tr − Trennzeichen String built−in−Funktionen 8.Awk 7.4.2017 a42 8.Awk j−p bell −W copyleft, −−copyleft Ausgabe des kurzen Copyrights −W compat, −−compat Kompatibilitätsmodus, gawk verhält sich wie awk −mr val Maximalwert für die Länge eines Satzes −mf val Maximalwert für die Anzahl von Feldern in einer Zeile Seite 27 a43 Seite 28 7.4.2017 −v var=val, −−assign=var=val Definition einer awk−Variablen <var> mit dem Wert <val> vor Begin der Abarbeitung des awk−Programms −F<fs>, −−field−separator=fs Feldseparator, Standard ist Leerzeichen Optionen: −f progfile, −−file=progfile File mit awk−Programm, mehrer derartiger Optionen sind möglich awk [POSIX−Optionen oder GNU−Optionen] [−−] ’program’ file ... Vollständiger Programmaufruf von awk −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− j−p bell awk −f /home/unixsoft/bell/awklib −f prog.awk beispieldatei Eine Funktionsbibliothek ist ein File mit nützlichen Funktionen, das wie das eigentliche awk−Script mittels einer −f Option beim awk−Aufruf angegeben wird, es sind also mehrere −f Optionen zulässig. Funktionsbibliothek "return" <Ausdruck> <Funktionsdefinition>::="function" <Funktionsname>"("<Parameterlist>")" "{" <Anweisung> { <Anweisung> }"}" Benutzer definierte Funktionen. Können bei Bedarf in das awk−Program eingefügt werden, auch als File mit Funktionsdefinitionen. <Funktionsdefinition> 8.Awk j−p bell Seite 30 add_dns <Hostname> − hinzufügen eines neuen Hosts zur Datenbasis add_dns.awk − modifizieren von db.informatik add_dns1.awk − modifizieren von db.141.20.xx del_dns <Hostname> − streichen eines Hosts aus der Datenbasis 1. Verwaltung der Datenbasis eines DNS−Servers: Seite 29 7.4.2017 −W traditional, −−traditional Reguläre Ausdrücke entsprechend dem ursprünglichen awk−Format werden unterstützt. −W source=program−text, −−source=program−text wie −f Option − awk−Programmtext −W re−interval, −−re−interval Intervall−Ausdrücke in Regulären Asudrücken erlauben 8.Awk −W posix, −−posix Posix−Kompatibilitätsmodus − nur reguläre Ausdrücke im POSIX− Format werde unterstützt. −W profile[=file], −−profile[=file] −W non−decimal−data, −−non−decimal−data Abschlußbeispiele −−−−−−−−−−−−−−−−− j−p bell 7.4.2017 −W lint−old, −−lint−old Ausgabe von Warnungen für awk−Konstruktionen, die nicht mit dem ursprünglichen awk verträglich sind. −W lint[=fatal], −−lint[=fatal] Ausgabe von Warnungen für awk−Konstruktionen, die nicht portable sind. −W help , −−help −W usage, −−usage Ausgabe einer kurzen Hilfe−Information −W gen−po, −−gen−po −W dump−variables[=file], −−dump−variables[=file] −W version, −−version Ausgabe der Versionsinformationen −W copyright, −−copyright Ausgabe des langen Copyrights 8.Awk