8.10 awk-Funktionen
awk bietet verschiedene Built-Funktionen an und erlaubt es dem Anwender eigene Funktionen zu definieren.8.10.1 awk Stringfunktionen
In der nachfolgenden Beschreibung steht :
r für regular expression als String oder /r/
s und t sind String-Ausdrücke
n und p sind Integer
a ist ein array
Funktion Beschreibung
gsub(r,s, [t]) ersetzt global alle gefundenen r (regular expression)
durch s (String) im Satz $0 oder in der angegebenen
t (Textvariablen)
geb="29.01.44"
gsub(/[0-9]+/, "(&) ", geb) --> "(29).(01).(44)"
index(s,t) liefert die Position vom ersten t im String s. Wenn t nicht
in s enthalten ist, wird 0 zurückgegeben
index("Reportgenerator","or") -> 4
length(s) liefert die Länge von String s zurück
x = length("Reportgenerator") -> 15
print length($0)
match(s,r) liefert die Position von t im String s. Wenn t nicht in s
enthalten ist, wird 0 zurückgegeben. Im Unterschied zu
index() wir als Suchmuster ein regular expression
akzeptiert. Zusätzlich werden die Systemvariablen
RSTART (Anfangsposition des gefundenen Strings) und
RLENGTH (Länge des gefundenen Musters) gesetzt.
Wurde r nicht gefunden ist RSTART=0 und RLENGTH=1.
{ if (match($0, /a.?i/))
print RSTART, RLENGTH, $0 }
split(s,a,[r}) splittet s in Einzelfelder. Zur Feldtrennung wird die
Variable FS b.z.w. r herangezogen.
split($0,zeile,/[0-9]:/)
sprintf(s,fmt[,expr-list]) formatiert die expr-list gemäß der Formatspezifikationen
im fmt String und legt das Ergebnis im String s ab statt es
wie printf auf stdout auszugeben.
sub(r,s, [t]) ersetzt nur den ersten gefundenen r (regular expression)
durch s (String) im Satz $0 oder in der angegebenen-
t (Textvariablen)
substr(s,p,[n]) substr extrahiert aus dem String s ab der Position p
n Zeichen oder den Rest des Strings.
substr("extrahieren",6,4) --> hier
substr("extrahieren",1,5) --> extra
toupper(s) liefert den angegebenen String als Großbuchstaben
zurück.
tolower(s) liefert den angegebenen String als Kleinbuchstaben
zurück.
8.10.2 awk Mathematische Funktionen
Funktion Rückgabewert atan2(y,x) Arcus Tangens von y /x im Bereich -p bis p cos(x) Cosinus von x. x muß asl Bogenmaß übergeben werden exp(x) Exponentialfunktion von x int(x) Ganzzahligen Teil, abgeschnitten in Richtung Null log(x) Natürlicher Logarithmus von x rand() Zufallszahl im Bereich 0 bis 1 sin(x) Sinus von x. x muß als Bogenmaß übergeben werden sqrt(x) Quadratwurzel von x srand(x) x ist ein neuer Startwert für die Funktion rand()
8.10.3 Time Functions
Da mit dem awk häufig Log-Dateien ausgewertet werden die Zeitangaben (timestamps) enthalten,
bietet der awk zwei Zeitfunktionen an. systime() liefert die Zeit in Sekunden seit dem UNIX-Zero-Date Midnight UTC, 1.1.1970 (UTC Universal Time Coordinate) strftime(format,timestamp) formatiert eine Zeitmarke die als timestamp vorliegt mit Hilfe eines Formatstrings und liefert einen String zurück. Im Formatstring können alle Spezifikationen verwendet werden, die auch in date benutzt werden können. print strftime(" Datum : %d.%m.%y Zeit : %H:%M", systime())
8.10.4 awk Eigene Funktionen
Funktionen sind eine Erweiterung des nawk.
Sie werden im Actionteil eines awk-Script aufgerufen.
Es können Parameter an die Funktion übergeben werden.
Syntax
function f_name(p1,p2) # p1 und p2 sind Parameter
{
printf " %7.2f \n", p1 * p2
}
f_name(4, 6.5) # Aufruf der Funktion mit Argumentenliste
Die Syntax für lokale Variablen ist sehr ungeschickt gewählt worden.
Sie werden definiert, indem sie in der Parameterliste nach einigen Blanks
angeführt werden.
function f_name(p1,p2, v1,v1) # v1 und v2 sind lokale Variablen
8.10.5 Function ansprechen
Eine Funktion wird durch Namensnennung angesprochen. Die öffnende Klammer muß unmittelbar hinter dem Funktionsnamen folgen (kein Blank dazwischen erlaubt). f_name(74,57) spricht die Funktion an und übergibt 2 Parameter. Eine Funktion kann andere Funktionen aufrufen. Der Aufruf darf auch rekursiv erfolgen.
8.10.6 system-Function
Mit Hilfe der system-Funktion kann aus dem awk eine beliebige UNIX-Anweisung
ausgeführt werden.
awk '
$1 == "#include" { gsub(/<>"/ , "" , $2) ; system ("cat " $2) }
' progr.c