#1 Le 13/12/2010, à 23:04
- sed_awk
calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
bonjour a tous et gros merci a tous la communoté ubuntu c géant !!!!! vivie et longue vie
mon probleme est ke jsuis nul et ke je ne sais pas me servire du man (manuel daide de la commande DATE)
lol je voudrai comparai deux date une debut et une de fin et apres avoir la difference en jour / minutes. voila ce ke j'ai commencer en maider sur le net avec les timestamp puis /86400 bref :
clear
FIC=./messages
DATE_DEBUT="`head -1 $FIC | awk '{print $1" "$2" "$3'}`"
DATE_FIN=`tail -1 $FIC | awk '{print $1" "$2" "$3'}`
$diff= (`echo -n \`date +%s -d \'$DATE_DEBUT\' \`` - `echo -n \`date +%s -d \'$DATE_FIN\'\``) / 86400
echo $diff
VTSP_DEBUT=`date +%s -d "$DATE_DEBUT"`
VTSP_FIN=`date +%s -d "$DATE_FIN"`
echo $VTSP_DEBUT
echo $VTSP_FIN
expr $VTSP_FIN - $VTSP_DEBUT
voila si une presonne pourrai maider a terminer ce script pour kil arrive a nous donnai la diff entr la date du debut et de fin ca serai cool lol. ps le fichier message contien des log avec des date
Hors ligne
#2 Le 14/12/2010, à 03:55
- pode
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
Avec bc :
# LANG=C : pour un formatage des dates à la POSIX
DATE_DEBUT=`LANG=C date -d "Tue Dec 12 15:00:30 CET 2010" +%s`
DATE_FIN=`LANG=C date -d "Tue Dec 13 12:00:00 CET 2010" +%s`
# ça marche aussi avec un format comme ça :
# DATE_DEBUT=`LANG=C date -d "2010-12-12 15:00:30" +%s`
# DATE_FIN=`LANG=C date -d "2010-12-13 12:00:00" +%s`
NOMBRE_JOUR_DIFF=`echo "( ${DATE_FIN}-${DATE_DEBUT} ) / 86400" | bc`
NOMBRE_HEURE_DIFF=`echo "( ( ${DATE_FIN}-${DATE_DEBUT} ) % 86400 ) / 3600" | bc`
NOMBRE_MINUTES_DIFF=`echo "( ( ( ${DATE_FIN}-${DATE_DEBUT} ) % 86400 ) % 3600 ) / 60" | bc`
NOMBRE_SECONDES_DIFF=`echo "( ( ( ${DATE_FIN}-${DATE_DEBUT} ) % 86400 ) % 3600 ) % 60" | bc`
$ echo "NOMBRE_JOUR_DIFF : $NOMBRE_JOUR_DIFF"
NOMBRE_JOUR_DIFF : 0
$ echo "NOMBRE_HEURE_DIFF : $NOMBRE_HEURE_DIFF"
NOMBRE_HEURE_DIFF : 20
$ echo "NOMBRE_MINUTES_DIFF : $NOMBRE_MINUTES_DIFF"
NOMBRE_MINUTES_DIFF : 59
$ echo "NOMBRE_SECONDES_DIFF : $NOMBRE_SECONDES_DIFF"
NOMBRE_SECONDES_DIFF : 30
Hors ligne
#3 Le 14/12/2010, à 03:57
- pode
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
(ne pas tenir compte des $ devant les commandes echo...)
Hors ligne
#4 Le 14/12/2010, à 07:45
- sed_awk
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
merci pour ta reponse je vais essayer ca ce soir et je te dit ca !!!
Hors ligne
#5 Le 14/12/2010, à 20:52
- sed_awk
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
svp que signifie formatage des dates à la POSIX ????
merci
Hors ligne
#6 Le 14/12/2010, à 21:19
- pode
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
La locale étant a priori :
$ echo $LANG
fr_FR.UTF-8
la date s'affichant en standard est :
$ date
mardi 14 décembre 2010, 21:11:23 (UTC+0100)
En changeant la locale et en prenant C (équivalent à POSIX), on a :
$ LANG=C date
Tue Dec 14 21:11:30 CET 2010
De toute façon, c'est juste un exemple. Il faut adapter le script au format réel affiché dans les logs (par exemple en transformant les dates du fichier de log en dates du type 2010-12-13 12:00:00 (i.e. AAAA-MM-JJ HH24:MI:SS), comme utilisé dans l'exemple en commentaire
Hors ligne
#7 Le 15/12/2010, à 10:39
- Totor
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
Bonjour,
date1=$(date +'%s')
sleep $RANDOM
date2=$(date +'%s')
echo "durée écoulée : $(date -u -d "@$((date2-date1))" +'%T')"
-- Lucid Lynx --
Hors ligne
#8 Le 15/12/2010, à 20:49
- sed_awk
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
bonjour pour compléter ma premier annonce voici a quoi ressemble mon fichier message :
ubun@jar~#cat message
Dec 5 07:57:33 ubunjar rsyslogd: [origin software="rsyslogd" swVersion="4.2.0" x-pid="967" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightwe
ight'.
Dec 5 15:29:01 ubunjar kernel: [1310385.399465] usb 1-5: USB disconnect, address 14
Dec 5 20:01:48 ubunjar kernel: [1326752.472028] usb 1-5: new high speed USB device using ehci_hcd and address 15
Dec 5 20:01:48 ubunjar kernel: [1326752.608247] scsi9 : usb-storage 1-5:1.0
Dec 5 20:01:49 ubunjar kernel: [1326753.610320] scsi 9:0:0:0: Direct-Access MIMOBOT 0.00 PQ: 0 ANSI: 2
Dec 5 20:01:49 ubunjar kernel: [1326753.612404] sd 9:0:0:0: Attached scsi generic sg6 type 0
Dec 5 20:01:49 ubunjar kernel: [1326753.613901] sd 9:0:0:0: [sdf] 7892087 512-byte logical blocks: (4.04 GB/3.76 GiB)
Dec 5 20:01:49 ubunjar kernel: [1326753.615141] sd 9:0:0:0: [sdf] Write Protect is off
Dec 5 20:01:49 ubunjar kernel: [1326753.619421] sdf: sdf1
Dec 5 20:01:49 ubunjar kernel: [1326753.926143] sd 9:0:0:0: [sdf] Attached SCSI removable disk
Dec 5 20:03:09 ubunjar kernel: [1326833.112769] NVRM: os_raise_smp_barrier(), invalid context!
Dec 5 20:03:09 ubunjar kernel: [1326833.129913] NVRM: os_raise_smp_barrier(), invalid context!
Dec 9 21:51:57 ubunjar kernel: [ 1093.856135] NVRM: os_raise_smp_barrier(), invalid context!
Dec 9 21:52:42 ubunjar kernel: [ 1138.834913] NVRM: os_raise_smp_barrier(), invalid context!
Dec 9 21:52:42 ubunjar kernel: [ 1138.852287] NVRM: os_raise_smp_barrier(), invalid context!
Dec 9 21:52:44 ubunjar kernel: [ 1141.001510] NVRM: os_raise_smp_barrier(), invalid context!
Dec 9 21:52:44 ubunjar kernel: [ 1141.018794] NVRM: os_raise_smp_barrier(), invalid context!
c'est un simple fichier de logs donc j'arrive a isoler la date de la première ligne et celle de la dernière ligne avec
head -1 $FIC | awk '{print $1" "$2" "$3'}
tail -1 $FIC | awk '{print $1" "$2" "$3'}
j'obtiens donc :Dec 5 07:57:33
Dec 9 21:52:44
j'ai rajouter ca a la fin de mon script et j'obtiens : Dec 5 07:57:33, Dec 9 21:52:44, 1291532253, 1291927964
ce qui donne une difference de 395711 secondes soit 4 jour et demi a peu
VTSP_DEBUT=`date +%s -d "$DATE_DEBUT"`
VTSP_FIN=`date +%s -d "$DATE_FIN"`
echo $VTSP_DEBUT
echo $VTSP_FIN
expr $VTSP_FIN - $VTSP_DEBUT
ce qui donne une difference de 395711 secondes soit 4 jour et demi a peu près
ce que je souhaite c'est terminer ce scripts et qu'il soit plus precis et portable
merci encore a touses
Hors ligne
#9 Le 15/12/2010, à 20:52
- sed_awk
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
voici la script en entier
#!/bin/bash
#set -x
clear
FIC=./messages
DATE_DEBUT="`head -1 $FIC | awk '{print $1" "$2" "$3'}`"
DATE_FIN=`tail -1 $FIC | awk '{print $1" "$2" "$3'}`
echo $DATE_DEBUT
echo $DATE_FIN
VTSP_DEBUT=`date +%s -d "$DATE_DEBUT"`
VTSP_FIN=`date +%s -d "$DATE_FIN"`
echo $VTSP_DEBUT
echo $VTSP_FIN
expr $VTSP_FIN - $VTSP_DEBUT
Hors ligne
#10 Le 16/12/2010, à 04:53
- ehmicky
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
Salut,
Sinon, tu peux faire en plus simple :
DATE_DEBUT="$(awk '( NR == 1 ) { print $1, $2, $3}' "$FIC")"
DATE_FIN="$(awk 'END { print $1, $2, $3}' "$FIC")"
Dernière modification par ehmicky (Le 16/12/2010, à 05:03)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#11 Le 16/12/2010, à 13:57
- sed_awk
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
et bien merci ehmicky c'est plus propre dans mon script .
Hors ligne
#12 Le 16/12/2010, à 16:58
- FRUiT
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
DATE_DEBUT="$(awk '( NR == 1 ) { print $1, $2, $3}' "$FIC")"
Pourquoi NR==1 entre parenthèses, y'a une raison ?
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#13 Le 16/12/2010, à 18:12
- Totor
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
@ehmicky :
petite astuce; pour n'afficher que les N premières colonnes, il est parfois plus simple de redéfinir le nombre de colonne et d'afficher $0.
Dans le cas présent il n'y a que 3 colonnes à afficher mais si le nombre est assez conséquent, la lisibilité est améliorée.
ex :
DATE_DEBUT="$(awk '( NR == 1 ) { NF=3; print}' "$FIC")"
Pour revenir au besoin :
{ read -d"-" DATE_DEBUT; read DATE_FIN; } < <(awk ' NR==1 { NF=3; dd=$0 } END {NF=3; printf dd "-" $0} ' "${FIC}")
date1=$(date +'%s' -d "${DATE_DEBUT}")
date2=$(date +'%s' -d "${DATE_FIN}")
duree=$((date2-date1))
infos=( $(date -u -d "@${duree}" +"%y %j %Hh%Mm%Ss") )
echo "durée écoulée : $((${infos[0]}-70)) années, $((${infos[1]}-1)) jours, ${infos[2]}"
Dernière modification par Totor (Le 17/12/2010, à 14:31)
-- Lucid Lynx --
Hors ligne
#14 Le 16/12/2010, à 23:42
- ehmicky
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
ehmicky a écrit :DATE_DEBUT="$(awk '( NR == 1 ) { print $1, $2, $3}' "$FIC")"
Pourquoi NR==1 entre parenthèses, y'a une raison ?
L'ignorance . Je savais pas qu'on pouvait s'en passer ^^
Sinon, merci Totor du conseil sur la modification de NF Du coup on peut faire encore plus simple :
DATE_DEBUT="$(awk 'NR == 1, NF=3' "$FIC")"
Dernière modification par ehmicky (Le 16/12/2010, à 23:51)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#15 Le 17/12/2010, à 00:15
- FRUiT
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
ah oki. J'étudie awk en ce moment alors ça me turlupinais... Y'avait peut-être une différence qui m'avait échappé... merci pour la précision.
Trop fort ce awk j'adore.
Dernière modification par FRUiT (Le 17/12/2010, à 00:17)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#16 Le 17/12/2010, à 00:34
- ehmicky
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
En fait moi-même je sais pas s'il y a une différence avec ou sans les parenthèses. Au test, on dirait que c'est pareil.
Sinon, on peut demander sur comp.lang.awk. Y'a vraiment des dingues là-bas.
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#17 Le 17/12/2010, à 01:06
- FRUiT
Re : calcule de diffenrence de date $DATE_DEBUT, $DATE_FIN, $DIFF
Bah, si tu avais pas de raison(s) particulière(s) d'en mettre moi l'explication me suffit, d'ailleurs ça semble logique vu que les parenthèses sont censées regrouper des éléments, et que là, il n'y a qu'un seul élément. Mais je note le site pour de futures questions, merci pour le lien
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne