文件中的时间差异

时间:2011-05-03 20:04:01

标签: shell awk

我有一个这种格式的文件

02:20:25
02:21:00
02:22:54
02:23:28 
02:29:30 
....

我需要计算两个连续行之间的时间差。有没有办法在shell脚本/ awk中执行此操作?

2 个答案:

答案 0 :(得分:5)

一种简单的方法是将每一行转换为秒,然后从当前行中减去前一行。容易在awk。如果这实际上是你想要的,那么这是一种可能性:

awk -f: '{\
  seconds = $1*60*60 + $2*60 + $3; \
  print seconds-prev_seconds; \
  prev_seconds=seconds;\
}' file.dat

这使得第一个区别变得愚蠢,但是通过默认为相同的值可以很容易地解决这个问题。它也不会转换回小时,分钟,秒的差异,但我不知道你是否需要它。

但要修复第一行,只需说出

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

现在第一个区别是0,这仍然很奇怪,但并不那么糟糕。

答案 1 :(得分:2)

这是awk 1衬里,用于获得输入的2行之间的时间差:

awk 'BEGIN{prevDt=0;} {gsub(/:/, " ", $1); dt=mktime("2011 01 01 " $1); print "Diff: " (dt-prevDt); prevDt=dt;}' 

OUTPUT(对于上面的输入文件)

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