J'ai un fichier au format suivant
02:20:25
02:21:00
02:22:54
02:23:28
02:29:30
....
J'ai besoin de calculer la différence de temps entre deux lignes successives. Existe-t-il un moyen de le faire en shell scripts / awk ?
J'ai un fichier au format suivant
02:20:25
02:21:00
02:22:54
02:23:28
02:29:30
....
J'ai besoin de calculer la différence de temps entre deux lignes successives. Existe-t-il un moyen de le faire en shell scripts / awk ?
Une façon simpliste serait de convertir chaque ligne en secondes, puis de soustraire la ligne précédente de la ligne actuelle. C'est facile en awk. Si c'est vraiment ce que vous voulez, alors voici une possibilité :
awk -f: '{\
seconds = $1*60*60 + $2*60 + $3; \
print seconds-prev_seconds; \
prev_seconds=seconds;\
}' file.dat
La première différence est donc stupide, mais il est facile d'y remédier en adoptant la même valeur par défaut. Il ne convertit pas non plus les différences en heures, minutes et secondes, mais je ne sais pas si vous en avez besoin.
Mais pour corriger la première ligne, il suffit de dire
awk -f: '{\
seconds = $1*60*60 + $2*60 + $3; \
if (prev_seconds == 0) prev_seconds = seconds; \
print seconds-prev_seconds; \
prev_seconds=seconds;\
}' file.dat
Maintenant, la première différence est de 0, ce qui est toujours bizarre mais pas aussi mauvais.
Voici la doublure awk 1 pour obtenir la différence de temps entre 2 lignes d'entrée comme ci-dessus :
awk 'BEGIN{prevDt=0;} {gsub(/:/, " ", $1); dt=mktime("2011 01 01 " $1); print "Diff: " (dt-prevDt); prevDt=dt;}'
Diff: 1293866425
Diff: 35
Diff: 114
Diff: 34
Diff: 362
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.