AWK TUTORIAL

Document Sample
AWK TUTORIAL
Shared by: techmaster
Stats
views:
2210
posted:
10/29/2008
language:
English
pages:
5
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 Note Gewicht

BWP 4.5 0.2

MA 6 1

PHT 2.75 1

SW 4.4 1

DB 5 1

IS 5.6 1

BWP 3.5 1

DT 4 1

E 4.5 1

SPK 5 1

KGS 5 1

MA 6 1

BWP 4.5 0.2

MA 6 1

SW 3.3 1

DT 6 1

MA 4.8 1

E 4.5 1

MA 5.5 1

BWP 4 1

MA 4.5 1

SW 4 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


Share This Document


Related docs
Other docs by techmaster
NetMeeting - User Guide
Views: 20  |  Downloads: 1
USB Card Reader/Writer User Manual
Views: 103  |  Downloads: 0
UPFS USER GUIDE 2006
Views: 119  |  Downloads: 0
DT Trainer Auto-Update Tutorial
Views: 16  |  Downloads: 0
Technical Specifications GF-8 Crane System
Views: 18  |  Downloads: 2
Vista User Guide
Views: 27  |  Downloads: 5
by registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!