awk

awk

awk ist eine Programmiersprache (Skriptsprache) zur Bearbeitung und Auswertung strukturierter Textdaten, beispielsweise CSV-Dateien. Der zugehörige Interpreter war eines der ersten Werkzeuge, das in der Version 3 von Unix erschien; es wird auch heute noch vielfach zusammen mit sed in Shell-Skripten eingesetzt, um Daten zu bearbeiten, umzuformen oder auszuwerten. Die Bezeichnung "awk" ist aus den Anfangsbuchstaben der Nachnamen ihrer drei Autoren Alfred V. Aho, Peter J. Weinberger und Brian W. Kernighan zusammengesetzt.

Eine Version von awk ist heute in fast jedem Unix-System zu finden, das historisch auf UNIX zurückzuführen ist. Ein vergleichbares Programm ist aber auch für fast alle anderen Betriebssysteme verfügbar. Die Free Software Foundation stellt unter dem Namen gawk eine erweiterte freie Variante zur Verfügung. Eine weitere freie Implementierung ist mawk von Mike Brennan. mawk ist kleiner und schneller als gawk, was allerdings durch einige Einschränkungen erkauft wird.

Die Sprache arbeitet fast ausschließlich mit dem Datentyp Zeichenkette (engl. String). Daneben sind assoziative Arrays (d. h. mit Zeichenketten indizierte Arrays, auch Hashs genannt) und reguläre Ausdrücke grundlegende Bestandteile der Sprache.

Die Leistungsfähigkeit, Kompaktheit, aber auch die Beschränkungen der awk- und sed-Skripte regten Larry Wall zur Entwicklung der Sprache Perl an.

Inhaltsverzeichnis

Aufbau eines awk-Programms

Die typische Ausführung eines awk-Programms besteht darin, Operationen – etwa Ersetzungen – auf einem Eingabetext durchzuführen. Hierzu wird der Text zeilenweise eingelesen und anhand eines gewählten Trenners – üblicherweise ein Leerzeichen – in Felder aufgespalten. Anschließend werden die awk-Anweisungen auf die jeweilige Zeile angewandt.

Die awk-Anweisungen haben dabei die folgende bedingte Struktur:

  Bedingung { Anweisungsblock }

Hierbei wird für die eingelesene Zeile oder eines ihrer Felder ermittelt, ob sie dem unter Bedingung genannten regulären Ausdruck entspricht. Ist dies der Fall, wird der Code innerhalb des von geschweiften Klammern umschlossenen Anweisungsblocks ausgeführt. Abweichend von der oben beschriebenen Struktur für awk-Anweisungen, bestehend aus Bedingung und Aktion, kann ein Statement auch nur aus einer Aktion

  { Anweisungsblock }

oder nur aus einer Bedingung

  Bedingung

bestehen. Fehlt die Bedingung, so wird die Aktion für jede Zeile ausgeführt. Fehlt die Aktion, so wird als Defaultaktion das Schreiben der ganzen Zeile ausgeführt, sofern die Bedingung erfüllt ist.

Variablen und Funktionen

Der Benutzer kann Variablen innerhalb von Anweisungsblöcken durch Referenzierung definieren, eine explizite Deklaration ist nicht notwendig. Der Gültigkeitsbereich der Variablen ist global. Eine Ausnahme bilden hier Funktionsargumente, deren Gültigkeit auf die sie definierende Funktion beschränkt ist.

Funktionen können an beliebiger Stelle definiert werden, die Deklaration muss dabei nicht vor der ersten Nutzung erfolgen. Falls es sich um Skalare handelt, werden Funktionsargumente als Wertparameter übergeben, ansonsten als Referenzparameter. Die Argumente bei Aufruf einer Funktion müssen nicht der Funktionsdefinition entsprechen, überzählige Argumente werden als lokale Variablen behandelt, ausgelassene Argumente mit dem speziellen Wert uninitialized – numerisch Null und als Zeichenkette den Wert des leeren Strings – versehen.

Funktionen und Variablen aller Art bedienen sich des gleichen Namensraums, so dass gleiche Benennung zu undefiniertem Verhalten führt.

Neben benutzerdefinierten Variablen und Funktionen stehen auch Standardvariablen und Standardfunktionen zur Verfügung, beispielsweise die Variablen $0 für die gesamte Zeile, $1, $2, … für das jeweils i-te Feld der Zeile und FS (von engl. field separator) für den Feldtrenner, sowie die Funktionen gsub(), split() und match().

awk-Befehle

Die Syntax der Befehlsanweisungen von awk ähnelt derjenigen der Programmiersprache C. Elementare Befehle sind Zuweisungen an Variablen, Vergleiche zwischen Variablen sowie Schleifen oder bedingte Befehlsausführungen (if-else). Daneben gibt es Aufrufe sowohl zu fest implementierten als auch zu selbst programmierten Funktionen.

Ausgeben von Daten auf der Standardausgabe ist durch den „print“-Befehl möglich. Um etwa das zweite Feld einer Eingabezeile auszudrucken, wird der Befehl

  print $2

benutzt.

awk-Bedingungen

Bedingungen sind in awk-Programmen entweder von der Form

 Ausdruck Vergleichsoperator Ausdruck

oder von der Form

 Ausdruck Matchoperator /reguläres Suchmuster/

Reguläre Suchmuster werden wie beim grep-Befehl gebildet, und Matchoperatoren sind ~ für "Muster gefunden" und !~ für "Muster nicht gefunden". Als Abkürzung für die Bedingung „$0 ~ /reguläres Suchmuster/“ (also die ganze Zeile erfüllt das Suchmuster) kann „/reguläres Suchmuster/“ verwendet werden.

Als spezielle Bedingungen gelten die Worte BEGIN und END, bei denen die zugehörigen Anweisungsblöcke vor dem Einlesen der ersten Zeile bzw. nach Einlesen der letzten Zeile ausgeführt werden.

Darüber hinaus können Bedingungen mit logischen Verknüpfungen zu neuen Bedingungen zusammengesetzt werden. Z.B.

  $1 ~ /^E/ && $2 > 20 { print $3 }

Dieser AWK-Befehl bewirkt, dass von jeder Zeile, die mit E beginnt und deren zweites Feld eine Zahl größer 20 ist, das dritte Feld ausgegeben wird.

Beispiele

Hier ein paar einfache Anwendungsbeispiele dazu, die man z. B. unter Linux einfach in einer Shell eingeben kann:

   echo Hallo Welt | awk '{print $1}'
   echo Hallo Welt | awk '{print $2}'

erzeugt die Ausgaben „Hallo“ bzw. „Welt

  echo Hallo Welt  | awk '{printf "%s %s!\n",$1,$2}'

erzeugt die Ausgabe „Hallo Welt!“ sowie einen Zeilenumbruch.

Versionen, Dialekte

Die neuere und erweiterte Version von awk ist nawk (new awk). Sie wurde 1985 eingeführt und ist die Grundlage aktueller awk-Implementationen. Sie unterscheidet sich durch die Möglichkeit, eigene Funktionen zu definieren, sowie eine größere Menge von Operatoren und vordefinierten Funktionen. Der Aufruf erfolgt zumeist dennoch über „awk“, seit eine Unterscheidung zwischen beiden Versionen obsolet geworden ist.

Eine von Michael Brennan geschriebene Implementation von awk ist mawk.

Literatur

Weblinks

Wikibooks Wikibooks: Awk – Lern- und Lehrmaterialien

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • AWK — Información general Paradigma Programación dirigida por eventos, Programación imperativa Apareció en 1977, última revision 1985, la versión POSIX actual es IEEE Std 1003.1 2004 …   Wikipedia Español

  • Awk — Pour les articles homonymes, voir Awk (homonymie). awk dont le nom vient des trois créateurs, Alfred Aho, Peter Weinberger et Brian Kernighan est un langage de traitement de lignes, disponible sur la plupart des systèmes Unix et sous Windows avec …   Wikipédia en Français

  • AWK — Класс языка: скриптовый, процедурный, событийно ориентированный Появился в: 1977 Автор(ы): Альфред Ахо, Питер Вайнбергер и Брайан Керниган Релиз …   Википедия

  • AWK — es un lenguaje de programación de propósito general que fue diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos. El nombre AWK deriva de los apellidos de los autores: Alfred V. Aho, Peter J. Weinberger, y Brian W.… …   Enciclopedia Universal

  • Awk — ([add]k), a. [OE. auk, awk (properly) turned away; (hence) contrary, wrong, from Icel. [ o]figr, [ o]fugr, afigr, turning the wrong way, fr. af off, away; cf. OHG. abuh, Skr. ap[=a]c turned away, fr. apa off, away + a root ak, a[u^]k, to bend,… …   The Collaborative International Dictionary of English

  • awk — awk·ward; awk·ward·ly; awk·ward·ness; awk; …   English syllables

  • Awk — Awk, adv. Perversely; in the wrong way. L Estrange. [1913 Webster] …   The Collaborative International Dictionary of English

  • AWK —   [Abk. für Aho, Weinberger, Kernighan (die Namen der Entwickler)], eine 1977 entwickelte einfache Programmiersprache, die es ermöglicht unter Unix Textdateien nach bestimmten Textmustern zu durchsuchen und nach zuvor festgelegten Kriterien zu… …   Universal-Lexikon

  • awk — (adj.) mid 15c., turned the wrong way, from O.N. afugr turned backwards, wrong, contrary, from P.Gmc. *afug , from PIE *apu ko , from root *apo off, away (see APO (Cf. apo )). Obsolete since 17c …   Etymology dictionary

  • AWK — (Aho Weinberger Kernighan) programming language included with the UNIX operating system that is designed for processing text files (the name is made from the initials of the three inventors) …   English contemporary dictionary

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”