Kurz: > Achtung: Shell-Anführungszeichen: Setze AWK-Programme in einfache Anführungszeichen, damit die Shell 1 nicht selbst ersetzt. In doppelten Anführungszeichen würde 1 von der Shell ausgewertet.
Teil des Kurses AWK
Eingebaute Variablen und Funktionen
| Name | Bedeutung |
|---|---|
$0, $1.. | Zeile, Felder |
NF, NR, FNR | Feldzahl, Zeilennummer |
FS, OFS, RS, ORS | Trenner |
FILENAME, ENVIRON | Datei, Umgebungsvariablen |
length, substr, index | Strings |
split, sub, gsub, match | Zerlegen/Ersetzen |
sprintf, toupper, tolower | Formatieren |
int, sqrt, sin, cos, exp, log, rand, srand | Mathematik |
system, getline, close | Prozesse und Dateien |
BEGIN {
srand(1)
zufall = rand()
print (zufall >= 0 && zufall < 1)
print ENVIRON["HOME"] != ""
print "Zeichen:", sprintf("%c%c%c", 76, 111, 76)
cmd = "echo hallo"
cmd | getline ausgabe
close(cmd)
print "Befehl lieferte:", ausgabe
print system("exit 3")
printf "%s %s\n", "a", "b"
printf "%5.1f%%\n", 99.5
}Ausgabe:
1
1
Zeichen: LoL
Befehl lieferte: hallo
3
a b
99.5%Typische Fehler
echo "a b" | awk '{ print $1 'Fehlermeldung:
unexpected newline or end of stringAchtung
Shell-Anführungszeichen: Setze AWK-Programme in einfache Anführungszeichen, damit die Shell
$1nicht selbst ersetzt. In doppelten Anführungszeichen würde$1von der Shell ausgewertet.
Hinweis
Nur die Ausgabe von
awkselbst ist hier gezeigt. Programme funktionieren mitgawk; reines POSIX-awk(z. B. macOS) kenntasort,gensubundPROCINFOnicht.
Weiterführende Quellen
- „The AWK Programming Language“ (Aho, Kernighan, Weinberger)
- gnu.org/software/gawk/manual: das gawk-Handbuch (englisch)
- grymoire.com/Unix/Awk.html: Tutorial mit vielen Beispielen
Merke
- AWK = Muster + Aktion, zeilenweise und feldweise
- Ideal für Berichte, Zählungen und Spaltenverarbeitung
- Für größere Programme sind Python oder Perl oft bequemer – für Einzeiler ist AWK unschlagbar
Übungsaufgabe
Werte eine Logdatei aus: Zähle Zeilen pro HTTP-Statuscode (Spalte 9).
Quiz zur Selbstkontrolle
Warum setzt man AWK-Programme in einfache Anführungszeichen?
- Damit die Shell $1 nicht ersetzt (richtig)
- Für bessere Lesbarkeit
- Wegen der Geschwindigkeit
- Es ist egal
Wofür ist system() gut?
- Führt einen Shell-Befehl aus (richtig)
- Zeigt Systeminfos
- Beendet AWK
- Sortiert
Welche Sprache eignet sich besser für sehr große Programme?
- Python oder Perl (richtig)
- AWK immer
- Nur Assembler
- Keine
Weiter im Kurs
Zurück: Praxisprojekte
Alle Kapitel: AWK im Überblick