Zeiten addieren - bash oder perl
Hallo Liste, ich versuche, nachzuvollziehen, wann und wielange ich online bin. Dabei weiß ich nicht ob es dafür schon fertige Lösungen gibt; kennt jemand welche? Ich versuche es folgendermaßen: ein Skript (ip-up.local) gibt mit echo + `/bin/date +'%m %d %H %M %S'` >> /var/log/online (und echo - ...) die Zeitpunkte aus, zu denen on-/offline gegangen wird. Damit habe ich schon mal die Zeiten, jetzt suche ich noch die akkumulierte Zeit. Mein erster Versuch mit Perl berechnet über Date::Calc:Delta_DHMS() die einzelnen Onlinezeiten, das funktioniert auch. Die liegen dann als ($d $h $m $s) vor. Ich komme aber nicht weiter bei dem Versuch, diese einzelnen Zeiten - am besten monatlich getrennt - aufzuaddieren. Ich habe versucht, das mit Add_Delta_DHMS() zu machen, aber das hat nicht so ganz geklappt, da ja DHMS zu einem festen Datum addiert wird. Hat jemand eine Idee / eine Lösung parat? Oder - wenns das schon gibt - als fertiges Paket? Gruß, Sebastian -- Do not meddle in the affairs of Wizards, for they are subtle and quick to anger. Sebastian Helms - http://www.helms.sh - mailto:mail@helms.sh (PGP welcome)
On 15-May-2001 Sebastian Helms wrote:
ich versuche, nachzuvollziehen, wann und wielange ich online bin.
Dabei weiß ich nicht ob es dafür schon fertige Lösungen gibt; kennt jemand welche?
Fuer ISDN sollte isdnrep das leisten. Ist bei den i4l-utils (oder wie
das Paket heisst) dabei.
Gruss,
Heinz.
--
E-Mail: Heinz W. Pahlke
On Die, Mai 15, 2001 at 07:40:11 +0200, Sebastian Helms wrote:
ich versuche, nachzuvollziehen, wann und wielange ich online bin.
Dabei weiß ich nicht ob es dafür schon fertige Lösungen gibt; kennt jemand welche?
isdnrep?
Ich versuche es folgendermaßen: ein Skript (ip-up.local) gibt mit
echo + `/bin/date +'%m %d %H %M %S'` >> /var/log/online
(und echo - ...) die Zeitpunkte aus, zu denen on-/offline gegangen wird.
Damit habe ich schon mal die Zeiten, jetzt suche ich noch die akkumulierte Zeit.
Mein erster Versuch mit Perl berechnet über Date::Calc:Delta_DHMS() die einzelnen Onlinezeiten, das funktioniert auch. Die liegen dann als ($d $h $m $s) vor.
Ich komme aber nicht weiter bei dem Versuch, diese einzelnen Zeiten - am besten monatlich getrennt - aufzuaddieren. Ich habe versucht, das mit Add_Delta_DHMS() zu machen, aber das hat nicht so ganz geklappt, da ja DHMS zu einem festen Datum addiert wird.
Hat jemand eine Idee / eine Lösung parat? Oder - wenns das schon gibt - als fertiges Paket?
Wenn isdnrep für Dich nicht in Frage kommt, warum addierst Du mühsam die einzelnen Datum-Bestandteile? Warum nicht gleich mit Sekunden rechnen, die kann man problemlos addieren, subtrahieren und dann in Minuten, Stunden, ... umrechnen. Also date +"%Y-%m %s" >>/var/log/online (Jahr und Monat am Anfang zum Sortieren nach Monaten) und dann bei der Auswertung einfach die Sekunden addieren. Umrechnen geht dann mit normalen Rechenoperationen: <ungetestet> zeit_berechnen () { zeit=$1 min=`expr $zeit / 60` sek=`expr $zeit - $min \* 60` if [ $min -gt 59 ]; then std=`expr $min / 60` min=`expr $min - $std \* 60` else std=0 fi if [ $std -gt 23 ]; then tag=`expr $std / 60` std=`expr $std - $tag \* 60` else tag=0 fi # Berechnung fertig: Ausgeben echo -n "Monat: $2 Online-Zeit $tag Tage, $std Stunden, " echo -n "$min Minuten, $sek Sekunden" } v_monat= # Vergleichsmonat fuer Ausgabe zeit=0 # kumulierte Zeit while read monat sekunden; do # Monatswechsel: Ausgabe if [ -n "$v_monat" -a ! \( "$monat" = "$v_monat" \) ]; then zeit_berechnen $zeit $monat # Nullen zeit=0 v_monat=$monat fi zeit=`expr $zeit + $sekunden` done
* Sebastian Helms schrieb am 15.Mai.2001:
ich versuche, nachzuvollziehen, wann und wielange ich online bin.
Dabei weiß ich nicht ob es dafür schon fertige Lösungen gibt; kennt jemand welche?
Ich versuche es folgendermaßen: ein Skript (ip-up.local) gibt mit
echo + `/bin/date +'%m %d %H %M %S'` >> /var/log/online
(und echo - ...) die Zeitpunkte aus, zu denen on-/offline gegangen wird.
Damit habe ich schon mal die Zeiten, jetzt suche ich noch die akkumulierte Zeit.
Kann man doch wunderbar mit date machen. echo $(($(date --date $ZEITPKT_ONLINE +%s) - $(date +%s))) Und Du erhälst die Sekunden, die Du online warst. Dabei ist $(( ... )) und $( ... ) bashspezifisch. $(...) kann man bekantermaßen durch `...` ersetzen, aber $((...)) nur mit expr ... Bernd -- Homepages von deutschsprachigen Linux-Gurus: Kristian Köhntopp: http://www.koehntopp.de/kris/artikel/ Sven Guckes: http://www.math.fu-berlin.de/~guckes/sven Robin S Socha: http://socha.net/index2.html |Zufallssignatur 10
Am Die, 15 Mai 2001 schrieb Sebastian Helms:
ich versuche, nachzuvollziehen, wann und wielange ich online bin.
Dabei weiß ich nicht ob es dafür schon fertige Lösungen gibt; kennt jemand welche?
Ich habe gerade auf der Linux-Magazin-CD ein interessantes script entdeckt, das Dich vielleicht interessiert. Ich kann Dir´s per PM schicken, sag einfach Bescheid... Gruß -- Andreas Meyer http://home.wtal.de/MeineHomepage
Sebastian Helms wrote:
Hallo Liste,
ich versuche, nachzuvollziehen, wann und wielange ich online bin.
...
Damit habe ich schon mal die Zeiten, jetzt suche ich noch die akkumulierte Zeit.
Wenn's auch awk sein darf: aus /var/log/messages werden "local IP address" und "Modem hangup" aufgespürt und dann die Differenz der Zeitstempel gebildet und addiert. Im folgenden Skript nur für den Mai: #! /bin/awk -f { neue_Verb = 0 if ($0 ~ /May/) { if ($0 ~ /local IP address/) { neue_Verb = 1 Verb_Anf = $3 } if (($0 ~ /Modem hangup/) && (neue_Verb = 1) ) { neue_Verb = 0 Verb_Ende = $3 split(Verb_Anf, t1, ":") split(Verb_Ende, t2, ":") s1 = t1[1]*3600 + t1[2]*60 + t1[3] s2 = t2[1]*3600 + t2[2]*60 + t2[3] if (s1 > s2) tdiff = 24*3600 - s1 + s2 else tdiff = s2 - s1 print tdiff summe += tdiff } } } END { print "-----------" print "Summe:" summe/60 " Minuten" } Start mit awk -f <dateiname> /var/log/messages Die Online-Zeit ist aber nur relevant, wenn Dein Provider sekundengenau abrechnet. Wenn er die Minuten aufrundet, mußt Du tdiff aufrunden auf Teilbarkeit durch 60. Gruss Ekkard
participants (6)
-
Andreas Meyer
-
Bernd Brodesser
-
Ekkard Gerlach
-
Heinz W. Pahlke
-
Jan.Trippler@t-online.de
-
Sebastian Helms