Awk: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 18: Zeile 18:


Folgende Optionen werden erkannt:
Folgende Optionen werden erkannt:
  '''-F'''''fs'' Setzt das Feldtrennzeichen auf ''fs''. Dies entspricht der awk-internen Variablen FS. Jede Eingabezeile bzw. jeder Datensatz wird durch Whitespace (Leerzeichen oder Tabulatoren) oder ein anderes benutzerdefiniertes Trennzeichen in Felder unterteilt. Die einzelnen Felder werden über die Variablen $1, $2,..., $n angesprochen. $0 bezieht sich auf den gesamten Datensatz.
  '''awk -F'''''fs''  
 
Setzt das Feldtrennzeichen auf ''fs''. Dies entspricht der awk-internen Variablen FS. Jede Eingabezeile bzw. jeder Datensatz wird durch Whitespace (Leerzeichen oder Tabulatoren) oder ein anderes benutzerdefiniertes Trennzeichen in Felder unterteilt. Die einzelnen Felder werden über die Variablen $1, $2,..., $n angesprochen. $0 bezieht sich auf den gesamten Datensatz.
   
   
  '''-v''' ''var=Wert'' Der Wert wird der Variablen ''var'' zugewiesen. Dies ermöglicht eine Zuweisung, bevor die Ausführung des Scripts beginnt.
  '''awk -v''' ''var=Wert''  
 
Der Wert wird der Variablen ''var'' zugewiesen. Dies ermöglicht eine Zuweisung, bevor die Ausführung des Scripts beginnt.




=== Beispiel ===
=== Beispiel ===
Um z.B. die ersten drei (durch einen Doppelpunkt getrennten) Felder aller Datensätze jeweils auf einer eigenen Zeile auszugeben, benutzt den folgenden Befehl (als Beispiel):
Um z.B. die ersten drei (durch einen Doppelpunkt getrennten) Felder aller Datensätze jeweils auf einer eigenen Zeile auszugeben, benutzt den folgenden Befehl (als Beispiel):
  awk '''-F''''':'' '{ print $1; print $2; print $3 }' /etc/passwd
  ''fs'' = :
awk '''-F:''' '{ print $1; print $2; print $3 }' /etc/passwd
ergibt:
ergibt:
  root
  root
Zeile 56: Zeile 61:


  '''-d --dump-variable[=''Datei'']'''
  '''-d --dump-variable[=''Datei'']'''
  Nach der Ausführung des Programms wird eine sortierte Liste der Globalen Variablen, ihrer Typen und ihrer letzten Werte in ''Datei'' ausgegeben. Wird keine Datei  
Nach der Ausführung des Programms wird eine sortierte Liste der Globalen Variablen, ihrer Typen und ihrer letzten Werte in ''Datei'' ausgegeben. Wird keine Datei  
  angegeben, ist die Vorgabe ''awkvars.out''.
angegeben, ist die Vorgabe ''awkvars.out''.
  '''-g --gen-po'''
  '''-g --gen-po'''
  Liest das awk-Programm und gibt alle Strings, die als übersetzbar markiert wurden, in Form einer GNU ''gettext'' Portable Object-Datei auf die Standardausgabe aus.
Liest das awk-Programm und gibt alle Strings, die als übersetzbar markiert wurden, in Form einer GNU ''gettext'' Portable Object-Datei auf die Standardausgabe aus.
  '''-h --help'''
  '''-h --help'''
  Gibt eine Anwenderbeschreibung auf der Konsole aus.
Gibt eine Anwenderbeschreibung auf der Konsole aus.
  '''-L --lint[=fatal]
  '''-L --lint[=fatal]
  Aktiviert die Prüfung auf nicht portable oder zweifelhafte Konstrukte, sowohl wenn das Programm gelesen wird, als auch während der Ausführung. Mit dem Argument ''fatal''  
Aktiviert die Prüfung auf nicht portable oder zweifelhafte Konstrukte, sowohl wenn das Programm gelesen wird, als auch während der Ausführung. Mit dem Argument ''fatal''  
  werden die lint-Warnungen fatale Fehler.
werden die lint-Warnungen fatale Fehler.
  '''-p --profile[=''Datei'']'''
  '''-p --profile[=''Datei'']'''
  awk gibt eine formatierte ("prettyprinted") Version des Programms in die ''Datei'' aus. Die Voereinstellung ist awk-prof.out.
awk gibt eine formatierte ("prettyprinted") Version des Programms in die ''Datei'' aus. Die Voereinstellung ist awk-prof.out.
  '''-P --posix''
  '''-P --posix''
  Schaltet die strikte POSIX-Portabilität an, bei der weder gebräuchliche noch gawk-spezifische Erweiterungen zulässig sind.
Schaltet die strikte POSIX-Portabilität an, bei der weder gebräuchliche noch gawk-spezifische Erweiterungen zulässig sind.
  '''-e '' 'Programmtext' '' --source[='' 'Programmtext' '']'''
  '''-e '' 'Programmtext' '' --source[='' 'Programmtext' '']'''
  ''Programmtext'' wird als Quellcode für awk verwendet. Mit der Option ''-f'' könnt ihr diese Option einsetzen, um Kommandozeilenprogramme mit awk-Bibliotheken zu mischen.
''Programmtext'' wird als Quellcode für awk verwendet. Mit der Option ''-f'' könnt ihr diese Option einsetzen, um Kommandozeilenprogramme mit awk-Bibliotheken zu mischen.
  '''-c --traditional'''
  '''-c --traditional'''
  Alle '''gawk'''-spezifischen Erweiterungen werden abgeschaltet, aber gebräuchliche Erweiterungen erlaubt (z.B. der **-Operator für die Exponentierung)
Alle '''gawk'''-spezifischen Erweiterungen werden abgeschaltet, aber gebräuchliche Erweiterungen erlaubt (z.B. der **-Operator für die Exponentierung)

Version vom 14. Februar 2021, 14:40 Uhr

„Awk“ wurde von Knoppi (Diskussion) als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere Knoppi (Diskussion) bitte, bevor du den Artikel bearbeitest.


awk ist eine Programmiersprache, bzw. Programm, zur Dateibearbeitung, Analyse und Auswertung von Texten auf der Grundlage von Mustererkennung, regular expressions (regex). Es bearbeitet hauptsächlich Zeichenketten, Strings. Dafür besteht in awk die Möglichkeitz.B. Verzweigungen und Schleifen, auch in selbstdefinierten Funktionen zu programmieren. Der Name ist aus den Anfangsbuchstaben der Nachnamen der drei Autoren Alfred V. Aho, Peter J. Weinberger und Brian W. Kernigham zusammengesetzt.

Awk gibt es seit Unix Version 3 - 1977. 1984 wurde von den selben Autoren eine neuere Version, nawk, herausgebracht. Die Version hier auf Archlinux basiert auf gawk von GNU, 1989.

Installation

Das Programm ist als awk in core verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S awk

Da awk im core-Paket ist, sollte es direkt zur Verfügung stehen, so dass es nicht mehr explizit installiert werden muss.

Verwendung

Die Syntax zum Starten von awk hat zwei Formen:

awk [Optionen] 'Skript' var=wert Datei(en)
awk [Optionen] -f Skriptdatei var=wert Datei(en

Im Terminal könnt Ihr direkt ein Skript angeben oder solch ein Skript in einer Skriptdatei speichern und mit der Option -f angeben. Auch mehrere -f-Skripten sind erlaubt. Werte können auch auf der Kommandozeile einer Variablen zugewiesen werden. Das kann ein String- oder numerische Konstante, eine Shellvariable ($Name) oder eine Befehlsersetzung ("Befehl") sein - er steht aber erst nach der Ausführung der Anweisung BEGIN zur Verfügung. awk behandelt mehrere Datei(en). Wenn keine angegeben werden/wird, liest awk von der Standardeingabe.

Folgende Optionen werden erkannt:

awk -Ffs 

Setzt das Feldtrennzeichen auf fs. Dies entspricht der awk-internen Variablen FS. Jede Eingabezeile bzw. jeder Datensatz wird durch Whitespace (Leerzeichen oder Tabulatoren) oder ein anderes benutzerdefiniertes Trennzeichen in Felder unterteilt. Die einzelnen Felder werden über die Variablen $1, $2,..., $n angesprochen. $0 bezieht sich auf den gesamten Datensatz.

awk -v var=Wert 

Der Wert wird der Variablen var zugewiesen. Dies ermöglicht eine Zuweisung, bevor die Ausführung des Scripts beginnt.


Beispiel

Um z.B. die ersten drei (durch einen Doppelpunkt getrennten) Felder aller Datensätze jeweils auf einer eigenen Zeile auszugeben, benutzt den folgenden Befehl (als Beispiel):

fs = :
awk -F: '{ print $1; print $2; print $3 }' /etc/passwd

ergibt:

root
x
0
bin
x
1
.
.
.

Muster und Prozeduren

awk-Skripten bestehen aus Muster und Proceduren:

Muster { Prozedur }

Beide sind optional. Sollte Muster fehlen, wird { Prozedur } auf alle Zeilen angewendet. Fehlt { Prozedur }, wird die gefundene Zeile ausgegeben.

Muster

Folgende Formen können Muster sein:

/regulärer Ausdruck/
Ausdruck für einen Vergleich
Ausdruck zur Mustererkennung
BEGIN
END


Ein paar wichtige Optionen von awk

Awk verfügt über eine große Anzahl Optionen. Im folgenden werden ein paar aufgeführt, die öfters benutzt werden.

-d --dump-variable[=Datei]

Nach der Ausführung des Programms wird eine sortierte Liste der Globalen Variablen, ihrer Typen und ihrer letzten Werte in Datei ausgegeben. Wird keine Datei angegeben, ist die Vorgabe awkvars.out.

-g --gen-po

Liest das awk-Programm und gibt alle Strings, die als übersetzbar markiert wurden, in Form einer GNU gettext Portable Object-Datei auf die Standardausgabe aus.

-h --help

Gibt eine Anwenderbeschreibung auf der Konsole aus.

-L --lint[=fatal]

Aktiviert die Prüfung auf nicht portable oder zweifelhafte Konstrukte, sowohl wenn das Programm gelesen wird, als auch während der Ausführung. Mit dem Argument fatal werden die lint-Warnungen fatale Fehler.

-p --profile[=Datei]

awk gibt eine formatierte ("prettyprinted") Version des Programms in die Datei aus. Die Voereinstellung ist awk-prof.out.

'-P --posix

Schaltet die strikte POSIX-Portabilität an, bei der weder gebräuchliche noch gawk-spezifische Erweiterungen zulässig sind.

-e  'Programmtext'  --source[= 'Programmtext' ]

Programmtext wird als Quellcode für awk verwendet. Mit der Option -f könnt ihr diese Option einsetzen, um Kommandozeilenprogramme mit awk-Bibliotheken zu mischen.

-c --traditional

Alle gawk-spezifischen Erweiterungen werden abgeschaltet, aber gebräuchliche Erweiterungen erlaubt (z.B. der **-Operator für die Exponentierung)