[ megoldva] Logfile statisztika

Sziasztok.
Újabb gondom van.
BASH alatt szeretnék egy idő alapű statisztikát írnom.
Lényege:
Vannak egy szöveges fájlban sorok, aminek a kinézete kb ennyi:
Év-Hó-Nap óra:perc:mp,ms a=
sallang u=
Ebből kellene csinálnom egy olyan kimenetet, hogy adott hónapban (evho változó vágja az elejét, KÉSZ) adott programot (szintén megoldva) adott user (ez is szűrve vagyon) hányszor használt.
For ciklussal gondoltam elindulni, első körben adott havi sorokat (teljes sort) rakok át egy átmeneti fájlba.
Erre a fájlra fut le a programok szűrése, majd egy újabb (beágyazott) for ciklussal egy program kimeneteit rakom át egy másik tmp fájlba. Ebből a fájlból szűröm az abban dolgozott felhasználókat.
Amit viszont nem tudok belőle kiszedni, hogy valahogy strukturált kimenetem legyen.
Valami ilyesmit szeretnék:
év-hó, program, felhasználó.
És soronként minden programra.
Ha simán echo-val akarom kinyerni az evho változót, akkor az összes dátum automatice benne van.
foreach-et meg nem ismer a bash :S
Perlre meg emiatt nem váltanék, mert a másik gép (amin élesben fog futni) nem tartalmazza.
A változók tartalma meg van, de minden általam kért adat benne van :(
Köszi a segítséget előre is.

Hozzászólások

Egy listába kiszűröd a lehetséges dátumokat (mondjuk sed+sort (-u)).
Egy listába kiszűröd a lehetséges user-eket (mint előbb).
Egy listába kiszűröd a lehetséges programokat (mint előbb).

Ezután képzed ezek direkt szorzatát és úgy haladsz végig. Persze nyilván nem ez a leghatékonyabb és egy idő után tetű lassú is, de ha nem lehet más eszköz, egy brute-force-nak jó ez.
Mittomén:

datumok=$(sed -r "s@([0-9]{4}-[0-9]{2}).*@\1@" logfile)
userek=$(sed -r "s@.*u=(.*)@\1@" logfile)
programok=$(sed -r "s@.*a=(.*) u=.*@\1@" logfile)
for datum in $datumok; do for user in $userek; do for program in $programok; do
    echo $datum $user $program $(grep -ec "^$datum.*a=$program.*u=$user" logfile)
done; done; done

Biztos vannak benne hibák, de első nekifutásra nem rossz ez :)

Hatékonyság miatt lehetne pl. inkább dátum-user párossal dolgozni (tehát nem $datumok és $userek lesz, hanem $datumok_userek) vagy még inkább user-program párossal (gondolom, nem minden programot futtat minden user, így legalább kevesebbszer kell grep-pelni).

Pont az ilyen mintakeresés + egyszerű műveletek végrehajtására szolgál az awk, amely egy igen egyszerű nyelv: a tömör dokumentációja - hajdan kipróbáltam - 7 oldalon elfér; egyébként pedig a bash/grep/sed ismeretével a nyelv felfogásának jó része teljesítve. Nagyon-nagyon valószínűtlen olyan rendszert találnod, amelyen semmilyen verziója nincs.
Ez a feladat 10 soron belül megoldható azzal.

Ráadásul a készségszintű elsajátítása után a perl automatikusan jön.

Némi segítség, ha úgy gondolnád: http://progkor.inf.elte.hu/MAN/HTML/awk.htm