Wissen, wo es lang geht

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