Gawk

Gawk

Die Programmiersprache (Skriptsprache) awk dient zur Bearbeitung und Auswertung einfacher Textdaten, beispielsweise CSV-Dateien. Der zugehörige Interpreter war eines der ersten Werkzeuge, die in der Version 3 von Unix erschienen; sie 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 jedem Unix-System zu finden. Es ist aber auch für fast alle anderen Betriebssysteme verfügbar. Die Free Software Foundation stellt unter dem Namen gawk eine erweiterte freie Version zur Verfügung.

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. Bei leerer Bedingung wird der Code des Blocks auf jede Zeile angewandt.

Als spezielle Varianten existieren mit BEGIN und END gekennzeichnete Anweisungsblöcke, die vor dem Einlesen der ersten Zeile bzw nach Einlesen der letzten Zeile ausgeführt werden.

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, 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.

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

  • Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger: The AWK Programming Language. Addison-Wesley, 1988, ISBN 0-201-07981-X (sollte bereits Ende 2007 auf Deutsch im OSTC Verlag erscheinen: Die Programmiersprache AWK, OSTC Verlag, 2007, ISBN 978-3-9811280-0-0)
  • Dale Dougherty and Arnold Robbins: sed & awk O’Reilly & Associates, 1997, ISBN 1-56592-225-5
  • Helmut Herold: awk und SED, 3. Auflage, Addison-Wesley, 2003, ISBN 3-8273-2094-1
  • Arnold Robbins: GAWK: Effective AWK Programming: A User’s Guide for GNU Awk O’Reilly, 2001, ISBN 0-596-00070-7, online unter http://www.gnu.org/software/gawk/manual/
  • Jürgen Peters: Programmieren mit awk, Oldenbourg, 1990, ISBN 3-486-21504-3
  • Reinhold Kalteis: awk – Die Programmiersprache für UNIX und DOS, Franzis, 1991, ISBN 3-7723-4231-0
  • Gottfried Staubach: UNIX-Werkzeuge zur Textmusterverarbeitung, Springer, 1989, ISBN 3-540-51232-2 und ISBN 0-387-51232-2
  • mawk in UNIX man page [1]

Weblinks


Wikimedia Foundation.

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

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

  • gawk — gawk·ham·mer; gawk·i·ly; gawk·i·ness; gawk·ish; gawk; gawk·ish·ly; gawk·ish·ness; …   English syllables

  • gawk´i|ly — gawk|y «G kee», adjective, gawk|i|er, gawk|i|est, noun, plural gawk|ies. –adj. awkward; clumsy: »A lanky, gawky fellow…tumbles over …   Useful english dictionary

  • gawk|y — «G kee», adjective, gawk|i|er, gawk|i|est, noun, plural gawk|ies. –adj. awkward; clumsy: »A lanky, gawky fellow…tumbles over …   Useful english dictionary

  • gawk — [go:k US go:k] v [Date: 1800 1900; Origin: Perhaps from gawk [i] left, left handed (18 19 centuries)] informal to look at something for a long time, in a way that looks stupid = ↑stare gawk at ▪ Don t just stand there gawking at those girls! …   Dictionary of contemporary English

  • Gawk — (g[add]k), n. [OE. gok, gowk, cuckoo, fool, Icel. gaukr cuckoo; akin to OHG. gouh, G. gauch cuckoo, fool, AS. g[ e]ac cuckoo, Sw. g[ o]k, Dan. gi[ o]g] 1. A cuckoo. Johnson. [1913 Webster] 2. A simpleton; a booby; a gawky. Carlyle. [1913 Webster] …   The Collaborative International Dictionary of English

  • Gawk — Gawk, v. i. 1. To act like a gawky. [1913 Webster] 2. To stare with empty minded fascination; to stare stupidly; to gape; usually used with at. [PJC] …   The Collaborative International Dictionary of English

  • gawk — /gawk/, v.i. 1. to stare stupidly; gape: The onlookers gawked at arriving celebrities. n. 2. an awkward, foolish person. [1775 85; appar. repr. OE word meaning fool, equiv. to ga(gol) foolish + oc OCK; used attributively in gawk hand, gallock… …   Universalium

  • gawk — [ gɔk ] verb intransitive INFORMAL to look at someone or something for a long time in a rude or stupid way: gawk at: What are you gawking at? …   Usage of the words and phrases in modern English

  • gawk — (v.) 1785, Amer.Eng., perhaps from gaw, a survival from M.E. gowen to stare (c.1200), from a Scandinavian source akin to O.N. ga to heed, from P.Gmc. *gawon , from PIE *ghow e to honor, revere, worship (see FAVOR (Cf. favor) (n.)); and altered… …   Etymology dictionary

  • gawk — [gôk] n. [prob. var. of GOWK] a clumsy, stupid fellow; simpleton vi. to stare stupidly, like a gawk gawkish adj …   English World dictionary

  • gawk´er — gawk «gk», verb, noun. –v.i. to stare idly, rudely, or stupidly: »Foreign tourists…normally spend freely while gawking at the pyramids (Wall Street Journal). –n. an awkward person; clumsy fool. ╂[perhaps < obsolete gaw stare] –gawk´er, noun …   Useful english dictionary

Share the article and excerpts

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