Programm zur Auswertung der Getränke-Datei:
prog.awk
BEGIN {
getr["Kaffee"]=0.50
getr["Tee"]=0.40
getr["Bier"]=2.10
getr["Wasser"]=1.00
getr["Saft"]=1.50
a_kaffee=0
a_tee=0
a_bier=0
a_wasser=0
a_saft=0
a_ges=0
}
/^#/ {
if(u_ges>0)
{
printf("\t===========|==========|===========|")
printf("===========\n")
printf("\tGesamtsumme:--------------------")
printf("--> %8.2f\n",u_ges)
u_ges=0
}
printf("\n\n\n")
printf("Getraenkeverzehr von %s\n",substr($0,2))
printf("------------------------------------")
printf("------------------\n")
printf("\tGetraenk | Anzahl | E-Preis |")
printf(" G-Preis\n")
printf("\t-----------|----------|-----------|")
printf("-----------\n")
}
/^[^#]/ {
art=substr($1,1,length($1)-1)
printf("\t%8s |..%4d |",art,$2)
printf(" %7.2f | %7.2f\n",getr[art],getr[art]*$2)
u_ges+=(getr[art]*$2)
}
END {
if(u_ges>0)
{
printf("\t===========|==========|===========|")
printf("===========\n")
printf("\tGesamtsumme:--------------------")
printf("--> %8.2f\n",u_ges)
u_ges=0
}
printf("\n\n\n")
}
Aufbau der Getränke-Datei:
prog.dat
#Klaus
Bier: 2
Kaffee: 18
Saft: 9
Tee: 25
Wasser: 27
#Elke
Bier: 1
Kaffee: 5
Saft: 19
Tee: 25
Wasser: 37
#Hans
Bier: 3
Kaffee: 1
Saft: 29
Tee: 35
Wasser: 17
Aufrufendes Programm:
rechnung
awk -f prog.awk prog.dat>liste
Ergebnis:
liste
Getraenkeverzehr von Klaus
------------------------------------------------------
Getraenk | Anzahl | E-Preis | G-Preis
-----------|----------|-----------|-----------
Bier | 2 | 2.10 | 4.20
Kaffee | 18 | 0.50 | 9.00
Saft | 9 | 1.50 | 13.50
Tee | 25 | 0.40 | 10.00
Wasser | 27 | 1.00 | 27.00
===========|==========|===========|===========
Gesamtsumme:----------------------> 63.70
Getraenkeverzehr von Elke
------------------------------------------------------
Getraenk | Anzahl | E-Preis | G-Preis
-----------|----------|-----------|-----------
Bier | 1 | 2.10 | 2.10
Kaffee | 5 | 0.50 | 2.50
Saft | 19 | 1.50 | 28.50
Tee | 25 | 0.40 | 10.00
Wasser | 37 | 1.00 | 37.00
===========|==========|===========|===========
Gesamtsumme:----------------------> 80.10
Getraenkeverzehr von Hans
------------------------------------------------------
Getraenk | Anzahl | E-Preis | G-Preis
-----------|----------|-----------|-----------
Bier | 3 | 2.10 | 6.30
Kaffee | 1 | 0.50 | 0.50
Saft | 29 | 1.50 | 43.50
Tee | 35 | 0.40 | 14.00
Wasser | 17 | 1.00 | 17.00
===========|==========|===========|===========
Gesamtsumme:----------------------> 81.30
Vorstehendes Beispiel wertet eine Getränkedatei aus, in der die innerhalb
eines bestimmten Zeitraumes verzehrten Getränke verschiedener
Systembenutzer aufgelistet sind.
Zunächst werden im Abschnitt BEGIN alle Variablen und ein
assotiatives Feld initialisiert. Der Index für den Zugriff auf dieses
Feld ist die in der Getränkedatei benutzte Getränkebezeichnung.
Es werden durch das Suchkriterium /^#/ alle Zeilen selektiert, die mit
dem Zeichen # beginnen. Das sind die Zeilen, die den Benutzer ausweisen,
für den die nachfolgenden Daten gelten. Durch das Suchkriterium
/^[^#]/ werden dagegen alle Zeilen selektiert, die nicht
mit dem Zeichen # beginnen. Das Entfernen des Doppelpunktes im
Getränkenamen ist notwendig, da ansonsten der Index nicht zum assoziativen
Feld passen würde.
Der Abschnitt END sorgt dafür, daß auch für den letzten
in der Datei eingetragenen Benutzer die Summe ausgegeben wird.