3 votes

différence entre les temps dans un fichier

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 ?

5voto

MJB Points 5105

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.

2voto

anubhava Points 172509

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;}' 

OUTPUT (pour le fichier d'entrée comme ci-dessus)

Diff: 1293866425
Diff: 35
Diff: 114
Diff: 34
Diff: 362

Prograide.com

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.

Powered by:

X