EMZETT.
Login

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

Kapitel 2 von 8 im Kurs AWK. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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 8

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.

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 1

Schleifen

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  9

Funktionen

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
2432902008176640000

Tipp

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, do fü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

Weiter im Kurs

Zurück: Einführung und erstes Programm

Weiter: Arrays und Zeichenketten

Alle Kapitel: AWK im Überblick