Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

ehmicky a écrit :
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

FRUiT a écrit :
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 smile. Je savais pas qu'on pouvait s'en passer ^^
Sinon, merci Totor du conseil sur la modification de NF smile 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 smile 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 smile


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