<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Awk</id>
	<title>Awk - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Awk"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Awk&amp;action=history"/>
	<updated>2026-05-14T18:40:56Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=Awk&amp;diff=239&amp;oldid=prev</id>
		<title>imported&gt;Uncopy: Korrigiere: `then` kommt in C nicht vor. Das Thema formatierte Ausgabe habe ich der einfacheren Verständlichkeit des Satzes geopfert</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Awk&amp;diff=239&amp;oldid=prev"/>
		<updated>2025-07-03T08:12:12Z</updated>

		<summary type="html">&lt;p&gt;Korrigiere: `then` kommt in C nicht vor. Das Thema formatierte Ausgabe habe ich der einfacheren Verständlichkeit des Satzes geopfert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{SEITENTITEL:awk}}&lt;br /&gt;
{{Dieser Artikel|behandelt die Programmiersprache. Für weitere Bedeutungen siehe [[AWK]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;awk&amp;#039;&amp;#039;&amp;#039; ist eine [[Programmiersprache]] zur Bearbeitung und Auswertung beliebiger Textdaten, u. a. auch [[CSV-Datei]]en. Der zugehörige [[Interpreter]] ist eher als [[Compiler]] zu betrachten, weil der Programmtext zuerst komplett kompiliert und dann ausgeführt wird. awk wurde primär als [[Reportgenerator]] konzipiert und erschien in der Version&amp;amp;nbsp;7&amp;lt;ref&amp;gt;{{Internetquelle |url=https://man.freebsd.org/cgi/man.cgi?query=awk&amp;amp;sektion=1&amp;amp;format=html#HISTORY |titel=awk(1) |abruf=2024-06-12}}&amp;lt;/ref&amp;gt; von [[Unix]]. Man kann awk als Weiterentwicklung oder Ergänzung des Streameditors [[Sed (Unix)|sed]] betrachten, sie teilen gewisse syntaktische Elemente wie etwa [[Regulärer Ausdruck|reguläre Ausdrücke]]. Im Unterschied zu sed stehen in awk aber einige aus [[C (Programmiersprache)|C]] bekannte [[Kontrollanweisung]]en wie &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; zur Verfügung, die einen wesentlich leichteren Programmaufbau erlauben. In der Minimalanwendung wird awk in [[Kommandozeileninterpreter|Shell]]-[[Skriptsprache|Skripten]] eingesetzt, um als Filter zum Beispiel Dateinamen zusammenzusetzen. Mit ausführlicheren Programmen gelingt es, Textdateien zu bearbeiten, umzuformen oder auszuwerten. Dazu stehen neben den üblichen Stringfunktionen aber auch mathematische Grund-Funktionen zur Verfügung. Der Name &amp;quot;awk&amp;quot; ist aus den Anfangsbuchstaben der Nachnamen ihrer drei Autoren [[Alfred V. Aho|Alfred V. &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;ho]], [[Peter J. Weinberger|Peter J. &amp;#039;&amp;#039;&amp;#039;W&amp;#039;&amp;#039;&amp;#039;einberger]] und [[Brian W. Kernighan|Brian W. &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039;ernighan]] zusammengesetzt. Englisch &amp;#039;&amp;#039;awk&amp;#039;&amp;#039; ist ein obsoletes Wort für &amp;#039;&amp;#039;falsch&amp;#039;&amp;#039;.&amp;lt;ref&amp;gt;{{Internetquelle|url=https://www.merriam-webster.com/dictionary/awk|titel=awk|hrsg=[[Merriam-Webster]]|abruf=2025-06-29}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Version von awk ist heute in fast jedem unixähnlichen System zu finden und oft bereits vorinstalliert. Ein vergleichbares Programm ist aber auch für fast alle anderen [[Betriebssystem]]e verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die Sprache arbeitet fast ausschließlich mit dem Datentyp [[Zeichenkette]] ({{enS|string}}). Daneben sind [[Assoziatives Array|assoziative Arrays]] (d.&amp;amp;nbsp;h. mit Zeichenketten indizierte Arrays, auch [[Hashtabelle|Hashes]] genannt) und [[Regulärer Ausdruck|reguläre Ausdrücke]] grundlegende Bestandteile der Sprache.&lt;br /&gt;
&lt;br /&gt;
Die Leistungsfähigkeit, Kompaktheit, aber auch die Beschränkungen der awk- und [[Sed (Unix)|sed]]-Skripte regten [[Larry Wall]] zur Entwicklung der Sprache [[Perl (Programmiersprache)|Perl]] an.&lt;br /&gt;
&lt;br /&gt;
== Aufbau eines Programms ==&lt;br /&gt;
[[Datei:POSIX awk.pdf|mini]]&lt;br /&gt;
Die typische Ausführung eines awk-Programms besteht darin, Operationen – etwa Ersetzungen – auf einem Eingabetext durchzuführen. Dafür wird der Text zeilenweise eingelesen und anhand eines gewählten Trenners – üblicherweise eine Serie von Leerzeichen und/oder [[Tabulatorzeichen]] – in Felder aufgespalten. Anschließend werden die awk-Anweisungen auf die jeweilige Zeile angewandt.&lt;br /&gt;
&lt;br /&gt;
awk-Anweisungen haben folgende Struktur:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
  Bedingung { Anweisungsblock }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die eingelesene Zeile wird ermittelt, ob sie die Bedingung (oft ein [[Regulärer Ausdruck]]) erfüllt. Ist die Bedingung erfüllt, wird der Code innerhalb des von geschweiften Klammern umschlossenen Anweisungsblocks ausgeführt.&lt;br /&gt;
Abweichend davon&lt;br /&gt;
kann ein Statement auch nur aus einer Aktion&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
  { Anweisungsblock }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder nur aus einer Bedingung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
  Bedingung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bestehen. Fehlt die Bedingung, so wird die Aktion für jede Zeile ausgeführt. Fehlt die Aktion, so wird als Standardaktion das Schreiben der ganzen Zeile ausgeführt, sofern die Bedingung erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
== Variablen und Funktionen ==&lt;br /&gt;
Der Benutzer kann Variablen innerhalb von Anweisungsblöcken durch Referenzierung definieren, eine explizite Deklaration ist nicht notwendig. Der [[Variable (Programmierung)#Sichtbarkeitsbereich von Variablen (Scope)|Gültigkeitsbereich]] der Variablen ist global. Eine Ausnahme bilden hier Funktionsargumente, deren Gültigkeit auf die sie definierende Funktion beschränkt ist.&lt;br /&gt;
&lt;br /&gt;
Funktionen können an beliebiger Stelle definiert werden, die Deklaration muss dabei nicht vor der ersten Nutzung erfolgen. Falls es sich um [[Skalare Variable|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 &amp;#039;&amp;#039;uninitialized&amp;#039;&amp;#039; – numerisch Null und als Zeichenkette den Wert des leeren Strings – versehen.&lt;br /&gt;
&lt;br /&gt;
Funktionen und Variablen aller Art bedienen sich des gleichen Namensraums, so dass gleiche Benennung zu undefiniertem Verhalten führt.&lt;br /&gt;
&lt;br /&gt;
Neben benutzerdefinierten Variablen und Funktionen stehen auch Standardvariablen und Standardfunktionen zur Verfügung, beispielsweise die Variablen &amp;lt;code&amp;gt;$0&amp;lt;/code&amp;gt; für die gesamte Zeile, &amp;lt;code&amp;gt;$1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$2&amp;lt;/code&amp;gt; … für das jeweils i-te Feld der Zeile und &amp;lt;code&amp;gt;FS&amp;lt;/code&amp;gt; (von engl. {{lang|en|&amp;#039;&amp;#039;field separator&amp;#039;&amp;#039;}}) für den Feldtrenner, sowie die Funktionen &amp;lt;code&amp;gt;gsub()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;match()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
Die [[Syntax]] von awk ähnelt derjenigen der [[C (Programmiersprache)|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.&lt;br /&gt;
&lt;br /&gt;
Ausgeben von Daten auf der Standardausgabe ist durch den „&amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;“-Befehl möglich. Um etwa das zweite Feld einer Eingabezeile auszudrucken, wird der Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
  print $2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
benutzt.&lt;br /&gt;
&lt;br /&gt;
== Bedingungen ==&lt;br /&gt;
Bedingungen sind in awk-Programmen entweder von der Form&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
 Ausdruck Vergleichsoperator Ausdruck&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder von der Form&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
 Ausdruck Matchoperator/reguläres Suchmuster/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reguläre Suchmuster werden wie beim [[grep]]-Befehl gebildet, und Matchoperatoren sind &amp;#039;&amp;#039;&amp;#039;~&amp;#039;&amp;#039;&amp;#039; für &amp;quot;Muster gefunden&amp;quot; und &amp;#039;&amp;#039;&amp;#039;!~&amp;#039;&amp;#039;&amp;#039; für „Muster nicht gefunden“. Als Abkürzung für die Bedingung „$0 ~ /&amp;#039;&amp;#039;reguläres Suchmuster&amp;#039;&amp;#039;/“ (also die ganze Zeile erfüllt das Suchmuster) kann „/&amp;#039;&amp;#039;reguläres Suchmuster&amp;#039;&amp;#039;/“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Als spezielle Bedingungen gelten die Worte &amp;#039;&amp;#039;BEGIN&amp;#039;&amp;#039; und &amp;#039;&amp;#039;END&amp;#039;&amp;#039;, bei denen die zugehörigen Anweisungsblöcke vor dem Einlesen der ersten Zeile bzw. nach Einlesen der letzten Zeile ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus können Bedingungen mit logischen Verknüpfungen zu neuen Bedingungen zusammengesetzt werden, z.&amp;amp;nbsp;B.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;awk&amp;quot;&amp;gt;&lt;br /&gt;
  $1 ~ /^E/ &amp;amp;&amp;amp; $2 &amp;gt; 20 { print $3 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser awk-Befehl bewirkt, dass von jeder Zeile, die mit &amp;#039;&amp;#039;E&amp;#039;&amp;#039; beginnt und deren zweites Feld eine Zahl größer 20 ist, das dritte Feld ausgegeben wird.&lt;br /&gt;
&lt;br /&gt;
== Versionen, Dialekte ==&lt;br /&gt;
Die erste awk-Version aus dem Jahr 1977 erfuhr 1985 eine Überarbeitung durch die ursprünglichen Autoren, die als &amp;#039;&amp;#039;nawk&amp;#039;&amp;#039; („new awk“) bezeichnet wurde. Sie bietet 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.&lt;br /&gt;
&lt;br /&gt;
Das [[GNU-Projekt]] der [[Free Software Foundation]] stellt unter dem Namen &amp;#039;&amp;#039;gawk&amp;#039;&amp;#039; eine nochmals erweiterte freie [[Variante (Software)|Variante]] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Eine weitere freie Implementierung ist &amp;#039;&amp;#039;mawk&amp;#039;&amp;#039; von Mike Brennan. mawk ist kleiner und schneller als gawk, was allerdings durch einige Einschränkungen erkauft wird.&lt;br /&gt;
&lt;br /&gt;
Auch [[BusyBox]] enthält eine kleine awk-Implementierung.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, &amp;#039;&amp;#039;Die Programmiersprache AWK&amp;#039;&amp;#039;, OSTC Verlag, 2010, ISBN 978-3-9811280-0-0.&lt;br /&gt;
* Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger: &amp;#039;&amp;#039;The AWK Programming Language.&amp;#039;&amp;#039; Addison-Wesley, 1988, ISBN 0-201-07981-X.&lt;br /&gt;
* Dale Dougherty and Arnold Robbins: &amp;#039;&amp;#039;sed &amp;amp; awk&amp;#039;&amp;#039; O’Reilly &amp;amp; Associates, 1997, ISBN 1-56592-225-5.&lt;br /&gt;
* Helmut Herold: &amp;#039;&amp;#039;awk und SED, 3. Auflage&amp;#039;&amp;#039;, Addison-Wesley, 2003, ISBN 3-8273-2094-1.&lt;br /&gt;
* Arnold Robbins: &amp;#039;&amp;#039;GAWK: Effective AWK Programming: A User’s Guide for GNU Awk&amp;#039;&amp;#039; O’Reilly, 2001, ISBN 0-596-00070-7. ([http://www.gnu.org/software/gawk/manual/ aktuelle Version online])&lt;br /&gt;
* Jürgen Peters: &amp;#039;&amp;#039;Programmieren mit awk&amp;#039;&amp;#039;, Oldenbourg, 1990, ISBN 3-486-21504-3.&lt;br /&gt;
* Reinhold Kalteis: &amp;#039;&amp;#039;awk – Die Programmiersprache für UNIX und DOS&amp;#039;&amp;#039;, Franzis, 1991, ISBN 3-7723-4231-0.&lt;br /&gt;
* Gottfried Staubach: &amp;#039;&amp;#039;UNIX-Werkzeuge zur Textmusterverarbeitung&amp;#039;&amp;#039;, Springer, 1989, ISBN 3-540-51232-2 und ISBN 0-387-51232-2.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks}}&lt;br /&gt;
* {{man|1|awk|bsd|pattern-directed scanning and processing language}}&lt;br /&gt;
* &amp;lt;code&amp;gt;[http://manpages.debian.org/cgi-bin/man.cgi?query=awk&amp;amp;sektion=&amp;amp;apropos=0&amp;amp;manpath=Debian%207.0%20wheezy awk(P)]&amp;lt;/code&amp;gt;: pattern scanning and processing language – [[Debian]] POSIX Programmer&amp;#039;s Manual&lt;br /&gt;
* [http://www.gnu.org/software/gawk/gawk.html GNU awk]-Website&lt;br /&gt;
* http://www.ostc.de/awk.pdf – Ausführliche Beschreibung auf Deutsch (PDF, 340&amp;amp;nbsp;kB)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste Befehle der GNU core utilities}}&lt;br /&gt;
{{Normdaten|TYP=s|GND=4242961-4}}&lt;br /&gt;
[[Kategorie:Unix-Software]]&lt;br /&gt;
[[Kategorie:Programmiersprache]]&lt;br /&gt;
[[Kategorie:Abkürzung]]&lt;br /&gt;
[[Kategorie:Linux-Software]]&lt;br /&gt;
[[Kategorie:GNU Core Utilities]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Uncopy</name></author>
	</entry>
</feed>