Kurz: > Hinweis: In AWK gibt es nur Zahlen und Strings. Eine nicht gesetzte Variable ist "" und 0 zugleich. Ob ein Wert als Zahl oder Text verglichen wird, hängt von seiner Herkunft ab.
Teil des Kurses AWK
Operatoren
BEGIN {
print 7 + 2, 7 - 2, 7 * 2, 7 / 2, 7 % 3, 2 ^ 10, 2 ** 3
a = 5; a += 3; a *= 2; print a
i = 1; i++; ++i; print i
print (3 < 5), (3 == 3), (3 != 3), ("a" < "b")
print (1 && 0), (1 || 0), !1
print "Text" " " "wird" " " "verkettet"
s = "abc"; print s s
print 1 " " 2
print 10 / 3
printf "%.2f\n", 10 / 3
print int(3.99), int(-3.99)
print sqrt(16), exp(0), log(1), sin(0), cos(0)
print length("hallo")
print 1e3, 0x10, 010
}Ausgabe:
9 5 14 3.5 1 1024 8
16
3
1 1 0 1
0 1 0
Text wird verkettet
abcabc
1 2
3.33333
3.33
3 -3
4 1 0 0 1
5
1000 16 8Hinweis
In AWK gibt es nur Zahlen und Strings. Eine nicht gesetzte Variable ist
""und0zugleich. Ob ein Wert als Zahl oder Text verglichen wird, hängt von seiner Herkunft ab.
Bedingungen
BEGIN {
n = 15
if (n % 15 == 0) print "FizzBuzz"
else if (n % 3 == 0) print "Fizz"
else if (n % 5 == 0) print "Buzz"
else print n
status = (n > 10) ? "groß" : "klein"
print status
s = "apfel"
if (s ~ /^a/) print "beginnt mit a"
if (s !~ /z/) print "kein z"
if (!(s in meine_liste)) print "nicht im Array"
if (length(leer) == 0) print "unbelegte Variable ist leer"
print (leer == 0), (leer == "")
}Ausgabe:
FizzBuzz
groß
beginnt mit a
kein z
nicht im Array
unbelegte Variable ist leer
1 1Schleifen
BEGIN {
for (i = 1; i <= 5; i++) printf "%d ", i
print ""
j = 0
while (j < 3) { printf "w%d ", j; j++ }
print ""
k = 10
do { printf "k=%d ", k; k++ } while (k < 12)
print ""
for (i = 1; i <= 10; i++) {
if (i % 2 == 0) continue
if (i > 7) break
printf "%d ", i
}
print ""
# verschachtelt
for (z = 1; z <= 3; z++) {
for (s = 1; s <= 3; s++) printf "%3d", z * s
print ""
}
}Ausgabe:
1 2 3 4 5
w0 w1 w2
k=10 k=11
1 3 5 7
1 2 3
2 4 6
3 6 9Funktionen
function quadrat(x) { return x * x }
function maximum(a, b) { return a > b ? a : b }
function fak(n) { return n <= 1 ? 1 : n * fak(n - 1) }
function wiederhole(text, n, erg, i) { # lokale Variablen durch zusätzliche Parameter
for (i = 0; i < n; i++) erg = erg text
return erg
}
BEGIN {
print quadrat(7), maximum(3, 9), fak(10)
print wiederhole("ab", 3)
print fak(20)
}Ausgabe:
49 9 3628800
ababab
2432902008176640000Tipp
Lokale Variablen deklariert man in AWK, indem man sie als zusätzliche Parameter hinten anfügt (mit Leerraum abgesetzt). Alle anderen Variablen sind global.
Merke
- Operatoren wie in C; Verkettung von Strings durch Hintereinanderschreiben
if/else,?:,for,while,dofür den Ablauf- Reguläre Ausdrücke mit
~und!~ - Funktionen mit
function; lokale Variablen als Extra-Parameter
Übungsaufgabe
Schreibe FizzBuzz für 1 bis 20.
Quiz zur Selbstkontrolle
Wie verkettet man Strings in AWK?
- Einfach hintereinanderschreiben (richtig)
- Mit +
- Mit &
- Mit .
Was ergibt eine nicht gesetzte Variable?
- Leeren String bzw. 0 (richtig)
- Einen Fehler
- null
- undefined
Wie deklariert man lokale Variablen in einer Funktion?
- Als zusätzliche Parameter (richtig)
- Mit local
- Mit var
- Mit my
Weiter im Kurs
Zurück: Einführung und erstes Programm
Weiter: Arrays und Zeichenketten
Alle Kapitel: AWK im Überblick