|
Suchmuster
Man kann folgende Suchmuster verwenden:
- BEGIN
Die BEGIN-Anweisung im Rumpf wird ausgeführt, bevor die erste Eingabezeile verarbeitet wird. - END
Die END-Anweisung im Rumpf wird ausgeführt, nachdem die letzte Eingabezeile verarbeitet wurde.
- Ausdruck
In Abhängigkeit des ausgewerteten Ausdrucks, der einen boolschen Wert
liefert, wird die Aktion ausgeführt oder nicht.
- /regulärer Ausdruck/
Die regulären Ausdrücke entsprechen denen von egrep.
Wird die aktuelle Eingabezeile durch den regulären Ausdruck abgedeckt, so
wird die Aktion ausgeführt.
- vergleichender Ausdruck
Vergleichende Ausdrücke können umfangreicher sein. Man kann z. B. testen, ob
bestimmte Felder einem regulären Ausdruck entsprechen.
- Suchmuster && Suchmuster
Suchmuster || Suchmuster
! Suchmuster
Muster können sich aus mehreren Mustern zusammensetzen, die durch die
Operatoren && (logisches UND), || (logisches ODER)
und ! (Negation).
Die Aktion wird genau dann ausgeführt, wenn der Gesamt-Ausdruck
einen wahren Wert liefert.
- Suchmuster1 ? Suchmuster2 : Suchmuster3
Der Ausdruck wird analog der Sprache C ausgewertet. Liefer Suchmuste1 einen
wahren Wert, gibt der Ausdruck Suchmuster2 zurück, sonst Suchmuster3.
- (Suchmuster)
( ) (runde Klammern) dienen der Strukturierung und Vorrangregelung bei
Ausdrücken.
- Suchmuster, Suchmuster
Zwei durch Komma getrennte Suchmuster ermitteln einen Bereich von Zeilen.
Die Aktion wird für den Bereich ausgeführt, der mit der Zeile
beginnt, die durch das erste Muster abgedeckt wird, und mit der Zeile endet, die
durch das zweite Muster abgedeckt wird.
Beispiel 1: Der Selektor
((NF > 2 ) || (NF < 8)) && ($0 !~ /^[^#]/ )
wählt alle Zeilen aus, die zwischen 3 und 7 Feldern besitzen und keine
Kommentarzeilen sind (also mit "#" beginnen).
Mit "Zeichenkette ~ /Muster/" lassen sich beliebige
Zeichenketten vergleichen. So extrahiert nachfolgendes Awk-Programm alle
Benutzernamen aus der Datei /etc/passwd, deren Heimatverzeichnis unterhalb von
/home liegt:
awk -F ':' '$6 ~ /^\/home/ {print $1}' /etc/passwd
Die zu vergleichende Zeichenkette ist hier das 6. Feld ($6) der Passwortdatei
(Heimatverzeichnis).
Zeichenklassen
Guter Programmierstil ist die Verwendung sogenannter
"Zeichenklassen". Ihre Syntax entspricht nicht nur dem POSIX-Standard,
sondern berücksichtigt auch länderspezifischen Unterschiede.
Ihr Programm wird somit portabel und ist nicht mehr von einem bestimmten
Zeichensatz abhängig. Dazu gleich ein Beispiel:
#!/usr/bin/awk -f
BEGIN {
String = ÄÖÜäöü
if (String ~ /[A-Za-z]/) print "A-Z funktioniert.";
if (String ~ /[[:alpha:]]/) print "Alpha funktioniert.";
}
[:alnum:] | Alphanumerische Zeichen |
[:alpha:] | Alphabetische Zeichen |
[:blank:] | Leerzeichen und Tabulatoren |
[:cntrl:] | Steuerzeichen |
[:digit:] | Numerische Zeichen |
[:graph:] | Druck- und sichtbare Zeichen (Ein Leerzeichen ist
druckbar aber nicht sichtbar, wogegen ein "a" beides ist) |
[:print:] | Druckbare Zeichen (also keine Steuerzeichen) |
[:punct:] | Punktierungszeichen Punctuation characters
(Zeichen die keine Buchstaben, Zahlen, Steuerzeichen oder Leerzeichen sind,
z. B. ".", "," ":") |
[:space:] | Druckbare aber nicht sichtbaren Zeichen (Leerzeichen,
Tabulatoren, Zeichenende, etc.) |
[:lower:] | Kleinbuchstaben |
[:upper:] | Großbuchstaben |
[:xdigit:] | Hexadezimale Zeichen (0-9,A-F,a-f) |
Um zu testen, ob in einer Variablen eine gültige Zahl (ganzzahlig)
gespeichert ist, bietet sich folgendes Konstrukt an:
echo "4711" | awk '/^[[:digit:]]+$/ {print "eine Zahl"}'
|
|
|