Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
wotan
- Beiträge: 113
- Registriert: 16.03.2004 20:41:04
Beitrag
von wotan » 16.04.2009 21:44:44
Folgendes Problem:
Ich brauche für den Aufruf von rrdtool zwei Timestamps die ich zur Scriptlaufzeit berechnen muss.
Das Heisst ich brauch den Timestamp für den 1. des Monats und für den letzten des Monats.
Beispiel:
first = 01.04.2009 00:00:00 => 1238536800
last = 30.04.2009 23:59:59 => 1241128799
Code: Alles auswählen
#!/bin/bash
first=$(date +%Y%m)01;
last=date -d "$(date -d month +%Y-%m-1) -1 day" +%d;
t=`date -d "$first" +%s`;
s=`date -d "$last" +%s`;
echo $t;
echo $s;
Kann mir hier vielleicht jemand unter die Arme greifen und Helfen?
Zuletzt geändert von
wotan am 17.04.2009 00:08:09, insgesamt 1-mal geändert.
mfg
wotan
-
yeti
Beitrag
von yeti » 16.04.2009 23:50:36
Code: Alles auswählen
#!/bin/bash
t1 ()
{
date -d $(date +%Y-%m-01 "$@") +%s
}
t2 ()
{
local monat=$(date +%m "$@") jahr=$(date +%Y "$@") sek;
case $monat in
12)
sek=$(date -d $((jahr+1))-01-01 +%s)
;;
*)
sek=$(date -d ${jahr}-$((monat+1))-01 +%s)
;;
esac;
echo $((sek-1))
}
cat<<dog
Testdatum t1_soll t2_soll
t1_ist t2_ist
2008-12-10 $(date -d 2008-12-01 +%s) $(date -d "2008-12-31 23:59:59" +%s)
$(t1 -d 2008-12-10) $(t2 -d 2008-12-10)
2009-04-15 $(date -d 2009-04-01 +%s) $(date -d "2009-04-30 23:59:59" +%s)
$(t1 -d 2009-04-15) $(t2 -d 2009-04-15)
2009-12-18 $(date -d 2009-12-01 +%s) $(date -d "2009-12-31 23:59:59" +%s)
$(t1 -d 2009-12-18) $(t2 -d 2009-12-18)
dog
2008 war mit einer zusätzlichen Schaltsekunde am Jahresende gesegnet?
Dann müsste eigentlich der erste Test um eine Sekunde falsch liegen...
...hab ich sonst nochwas überseh'n?
Naja... zumindest als erste Diskussionsgrundlage ist es wohl brauchbar...
...achja... für den normalen Einsatz t1 und t2 ohne das zusätzliche "-d"-Zeugs benutzen... das "-d"-Zeugs ist nur zum Testen manuëll angegebener Daten, ohne Dieses wird das aktuëlle Datum benutzt...
-
GoKi
- Beiträge: 2068
- Registriert: 04.07.2003 23:08:56
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von GoKi » 16.04.2009 23:56:59
Nur mal so als Idee:
t1:
t2:
Code: Alles auswählen
date -d "$(date +%F) - $(date +%d) days + 1 month + 86399 seconds" +%s
date -d "$(date +%F) - $(date +%d) days + 1 month + 1 day - 1 second" +%s
Zuletzt geändert von
GoKi am 16.04.2009 23:59:35, insgesamt 1-mal geändert.
MfG GoKi
:wq
-
wotan
- Beiträge: 113
- Registriert: 16.03.2004 20:41:04
Beitrag
von wotan » 16.04.2009 23:57:11
@yeti
Kannst du bitte mal den Code-Block unterteilen ind Script- und Consolen-Bereich.
mfg
wotan
-
wotan
- Beiträge: 113
- Registriert: 16.03.2004 20:41:04
Beitrag
von wotan » 17.04.2009 00:01:13
@GoKi
Danke das ist es.
[Edit]
Nur der Vollständigkeithalber:
Code: Alles auswählen
#!/bin/bash
first=`date -d "$(date +%F) - $(date +%d) days + 1 day" +%s`;
last=`date -d "$(date +%F) - $(date +%d) days + 1 month + 86399 seconds" +%s`;
VRX=`rrdtool fetch DATEI.rrd AVERAGE -r 3600 --start "$first" --end "$last" |perl -ne '/^(\d+):/; print if $1 % 3600 == 0;' |perl -e '
while (<>) {
next unless /^\d+:\s+ ([\d\.\+e]+)\s+ ([\d\.\+e]+)/xi;
push (@sample, [ $1*8, $2*8 ]);
}
@sample_rx = sort { $b->[0] <=> $a->[0] } @sample;
printf "%f", $sample_rx[@sample_rx/20][0];
'`
Zuletzt geändert von
wotan am 17.04.2009 00:06:41, insgesamt 2-mal geändert.
mfg
wotan
-
yeti
Beitrag
von yeti » 17.04.2009 00:02:13
wotan hat geschrieben:@yeti
Kannst du bitte mal den Code-Block unterteilen ind Script- und Consolen-Bereich.
???
Zum Testen erstmal alles in ein Skript packen und einfach laufenlassen...
Wenn Du die Funktionen in Kommandozeilen brauchst, dann steck sie in eine eigene Datei und lad sie mit "source dateiname_evtl_mit_pfad" in der Kommandozeile...
-
hikaru
- Moderator
- Beiträge: 13934
- Registriert: 09.04.2008 12:48:59
Beitrag
von hikaru » 17.04.2009 08:57:19
OT:
yeti hat geschrieben:2008 war mit einer zusätzlichen Schaltsekunde am Jahresende gesegnet?
Ja.
Die 34. um genau zu sein.
-
yeti
Beitrag
von yeti » 17.04.2009 10:16:27
hikaru hat geschrieben:OT:
yeti hat geschrieben:2008 war mit einer zusätzlichen Schaltsekunde am Jahresende gesegnet?
Ja.
Die 34. um genau zu sein.
...nur Haarspalter und Erbsenzähler werden nachschauen, ob date diese Sondersekunde berücksichtigte und evtürell ihr Skript anpassen wollen?
Schon doll, was heut zutage alles OTlich ist...