AWK TUTORIAL

Reviews
Shared by: techmaster
Stats
views:
34
rating:
not rated
reviews:
0
posted:
10/29/2008
language:
English
pages:
0
AWK Was ist awk? Awk ist eine einfache Scriptsprache vorwiegend gebraucht zur Verarbeitung von Texdateien. Die drei Buchstaben awk stehen für die Nachnamen der 3 Entwickler von awk: Alfred V. Aho, Peter J. Weinberger & Brian W. Kernighan. Verwendung Man hat beispielsweise eine lange Logdatei. Interessant sind aber nur wenige Daten. Mit awk kann die Datei Zeile für Zeile abgearbeitet, die wichtigen Daten herausgefiltert und ein formatierter Report ausgegeben werden. Wie führe ich awk aus? Es gibt 2 Möglichkeiten awk auszuführen. Awk kann einerseits direkt über die Kommandozeile aufgerufen werden. Die zweite Methode erlaubt dem Programmierer sein awk-script in einer Datei abzulegen und auf dieses aus der Kommandozeile zu verweisen. 1. awk ’BEGIN{…}{…}END{…}’ [datei(en) die verarbeitet werden soll(en)] 2. awk –f awk-script [datei(en) die verarbeitet werden soll(en)] Eingabe- und Ausgabedateien sind in awk optional. Als Standard liest awk vom Standardinput und Standardoutput. Übungsbeispiele $ awk ’{print}’ eingabedatei  Eingabedatei wird auf dem Standardoutput ausgegeben. $ awk -F: '{print $5, $6}' /etc/passwd  Gibt Namen der Benutzer und das jeweilige Home-Verzeichnis aus. $ ls -al | awk '{print NF}'  Gibt Anzahl Felder oder Spalten aus. $ ls -al | awk '{a=a+$5} END{print a}'  Gibt Summe der Dateigrössen aus. $ ls –al | awk '/^d/{print}'  Gibt nur Unterverzeichnisse eines Verzeichnisses aus. Aufbau eines Awk-Scriptes BEGIN{ #Der Code in diesem Abschnitt wird ausgeführt, #bevor die Inputdaten abgearbeitet werden. #Hier können user-definierte & built-in Variablen #initialisiert und geändert werden. Code ... } { #In diesem Abschnitt werden die Inputdaten abgearbeitet. Code ... } END{ #Nachdem alle Inputdaten abgearbeitet wurden, #wird noch dieser Abschnitt ausgeführt. #Auswertungen aus der Abarbeitung der Inputdaten #können hier beispielsweise ausgegeben werden. Code ... } Operatoren * / % + - = ++ -- += -= *= /= %= built-in-variables Built-in-Variables sind Variabeln die in awk bereits bestehen. $0 : Zeile $1 : erstes Feld einer Zeile $n: ntes Feld einer Zeile NR: Zeilennummer NF: Anzahl Felder einer Zeile FS: Abgrenzungszeichen der Inputdaten (standard: white space, tab oder space) ... vollständige Liste siehe Anhang built-in-functions Built-in-Functions sind bestehende awk Funktionen. print length() exit split() …mehr Funktionen & so unter: http://www.cl.cam.ac.uk/texinfodoc/gawk_toc.html http://www.clug.in-chemnitz.de/vortraege/awk/ http://www.sunsite.utk.edu/gnu/gawk/gawk_toc.html http://stommel.tamu.edu/~baum/programming.html#awk Bücher sed & awk (2nd Edition) by Dale Dougherty, Arnold Robbins im O’Reilly Verlag Beispiel Script zur Berechnung des Notendurchschnittes Hans Ruedi ist im 2. Semester an der ZHW und studiert Kommunikation & Informatik. Er hat bislang seine Noten mit dem Notpad in ein ’bluttes’ Textfile geschrieben (siehe Notenliste). Hans Ruedi will nun wissen ob sich sein Notenbild zeigen lässt und hat sich darum entschieden ein awk-script (siehe berechneDurchschnitt) zu schreiben, das ihm den Notendurchschnitt berechnet. notenliste #Fach BWP MA PHT SW DB IS BWP DT E SPK KGS MA BWP MA SW DT MA E MA BWP MA SW Note 4.5 6 2.75 4.4 5 5.6 3.5 4 4.5 5 5 6 4.5 6 3.3 6 4.8 4.5 5.5 4 4.5 4 Gewicht 0.2 1 1 1 1 1 1 1 1 1 1 1 0.2 1 1 1 1 1 1 1 1 0.5 berechneDurchschnitt BEGIN{ #arrays initialisieren split("BWP MA PHT SW DB DT IS E SPK KGS", fach) split(0 0 0 0 0 0 0 0 0 0, note) split(0 0 0 0 0 0 0 0 0 0, gewicht) #variabeln initialisieren fGruppe1=0 fGruppe2=0 fGruppe3=0 } { #hauptteil #leere Zeile wird übersprungen if(length($0) == 0) next #falls die Zeile mehr als 3 Spalten hat wird das Programm abgebrochen if(NF != 3){ print "Fehler! Zeile: "NR exit } #arrays fach, noten und gewicht abfüllen for( i = 1 ; i <= 10; i++){ if (fach[i] == $1){ note[i] += $2 * $3 gewicht[i]+= $3 } } } END{ #AUSGABE AUSWERTUNG print "************************************" print "* irene haller 22.4.2002 *" print "* Noten berechnen *" print "************************************" print "--------------------------" print " durchschnitt fach" print "--------------------------" for(j=1; j <= 10; j++){ if(gewicht[j] != 0){ print fach[j] ":" note[j]/gewicht[j] } } print "--------------------------" print "Durchschnitt Faechergruppe" print "--------------------------" #sind noten vorhanden? if(gewicht[1]!= 0 && gewicht[2] != 0 && gewicht[3]!= 0){ #dann wird der Durchschnitt berechnet fgruppe1 = (((note[1]/gewicht[1]) * 6 +(note[2]/gewicht[2]) * 8 +(note[3]/gewicht[3]))/15) print "bwp,ma,pht: " fgruppe1 } if(gewicht[4] != 0 && gewicht[5] != 0 && gewicht[6] != 0 && gewicht[7]!= 0){ fgruppe2 = (((note[4]/gewicht[4]) * 2 + (note[5]/gewicht[5]) + (note[6]/gewicht[6]) + (note[7]/gewicht[7]))/5) print "sw,db,is,dt: " fgruppe2 } if(gewicht[8] != 0 && gewicht[9] != 0 && gewicht[10] != 0){ fgruppe3 = (((note[8]/gewicht[8]) + (note[9]/gewicht[9]) + (note[10]/gewicht[10]))/3) print "e,spk,kgs: " fgruppe3 } print "--------------------------" print " Gesamtdruchschnitt" print "--------------------------" if(fgruppe1 !=0 && fgruppe2 !=0 && fgruppe3 !=0){ print " " (fgruppe1 + fgruppe2 + fgruppe3)/3 } } Awk-script und Inputfile sind vorhanden. Jetzt muss Hans Ruedi nur noch den richtigen Befehl auf der Kommadozeile absetzten: $ awk –f berechneDurchschnitt notenliste

Related docs
awk
Views: 23  |  Downloads: 1
Awk
Views: 6  |  Downloads: 1
awk
Views: 4  |  Downloads: 1
Introduction to awk
Views: 68  |  Downloads: 4
Review of Awk Principles
Views: 35  |  Downloads: 5
awk - Quick reference
Views: 16  |  Downloads: 5
AWK Commands Cheat Sheet
Views: 43  |  Downloads: 3
Systemtap tutorial
Views: 42  |  Downloads: 0
Unix Tutorial
Views: 133  |  Downloads: 12
ns-2 Tutorial
Views: 244  |  Downloads: 37
GNU / Linux Tutorial
Views: 190  |  Downloads: 40
Other docs by techmaster
associated-press-02-16-06
Views: 65  |  Downloads: 0
Descartesdesign7
Views: 43  |  Downloads: 0
Buster_Lessons_23-24
Views: 37  |  Downloads: 1
design_animation
Views: 265  |  Downloads: 10
burkethesis
Views: 57  |  Downloads: 0
Blockdot-04-01-02-FHM
Views: 58  |  Downloads: 2
catmull-animation
Views: 197  |  Downloads: 4
trdll10
Views: 34  |  Downloads: 0
contribCT
Views: 29  |  Downloads: 0
FujiFilm - AS-1
Views: 396  |  Downloads: 1
cp14Msol
Views: 35  |  Downloads: 0
b-agenda
Views: 102  |  Downloads: 4
DalMagWint06
Views: 692  |  Downloads: 0
CS_Arch_Casino_Royale
Views: 93  |  Downloads: 1
ArtofBuddhism2
Views: 106  |  Downloads: 5