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