linux-l: Wochentag in awk
Ralf Balzer
mail at ralf-balzer.de
Fr Jun 9 12:22:18 CEST 2000
Hallo Oliver,
>
>....
> Du ja wohl offensichtlich ohnehin mit der bash arbeitest, kann
> ich eigentlich nur empfehlen, gleich von der bash aus date aufzurufen.
>
Das Problem besteht darin, das ich das Ergebnis in awk weiterverarbeiten
will, genauer :
LogDatei mit Datum/Uhrzeit > awk > Auswertung Stunden pro Wochentag.
Inzwischen habe ich eine allerdings sehr langsame Lösung mit mehrfachen
awks. Das sieht dann so aus :
grep $MONAT /var/log/isdn.log | \
grep $lognum | \
awk -v Provider="$provider" ' \
{ Jahr = substr($4,1,4) } \
{ S = "echo -e \"\`date -d \"" $1 " " $2 " " Jahr "\"
+%a\` \\c\"" } \
{ system( S ) } \
{ printf "%s %s %s %s %s \n", $1, $2, Jahr, $3,
substr($7,1,length($7)-1) } ' | \
awk -v Provider="$provider" ' \
{ printf "%s %s %s %s ", $2, $3, $5, $6 } \
{ stunde = int(substr($5,1,2)) } \
{ S = ". /root/bin/lcr -ak -s " Provider " -w " $1 " -h
" stunde } \
{ system( S ) } ' | \
awk ' \
BEGIN {SUMME=0; GesamtZeit=0 } \
{ dauer = $4-'$MinTime' }\
dauer < 0 { dauer = 0 } \
{ stunde = int(substr($3,1,2)) } \
{ min = int(dauer/60) } \
{ sec = dauer-(min*60) } \
{ betrag =
(int((dauer)/'$chargetime')+1)*$5*('$chargetime'/60)} \
(stunde>='$VonStunde') && (stunde<='$BisStunde') \
{ SUMME += betrag; GesamtZeit += dauer; printf
"%2s %s %s %s %3s:%02s %6.2f\n", $2, $1, $3, $5, min, sec, betrag} \
END {min = int(GesamtZeit/60); sec=GesamtZeit-min*60; \
printf "Summe : %4s:%02s %6.2f bei
MinTime=%s\n",min, sec, SUMME,'$MinTime'}'
Zur Erklärung :
/root/bin/lcr sucht den minutenpreis aus einer Providerdatei
Das ganze dient der Abrechnungskontrolle der Internetprovider,
weil ich irgendwie mit isdnlog und der Tarif-Abrechnung nicht klarkomme.
Ist für isdnlog vielleicht inzwischen auch ein bischen zu kompliziert,
weil ja keine Takte übertragen werden.
Wenn Dir/Euch noch etwas einfällt dazu, dann seid Ihr herzlich
eingeladen,
diese Ideen mit mir zu teilen.
mfg
Ralf Balzer
Mehr Informationen über die Mailingliste linux-l