Awk处理时间差值的方法

比如文件中每行有2个时间数值,需要计算出每行时间的差值

time.txt

2014-08-25 09:58:47,2014-08-25 09:58:51
2014-08-25 09:58:49,2014-08-25 09:58:56
2014-08-25 09:58:49,2014-08-25 09:58:57
2014-08-25 09:58:50,2014-08-25 09:58:57
2014-08-25 09:58:52,2014-08-25 09:58:56
2014-08-25 09:58:52,2014-08-25 09:58:57
2014-08-25 09:58:55,2014-08-25 09:59:02
2014-08-25 09:58:58,2014-08-25 09:59:02
2014-08-25 09:59:00,2014-08-25 09:59:07
2014-08-25 09:59:00,2014-08-25 09:59:08
2014-08-25 09:59:03,2014-08-25 09:59:07
2014-08-25 09:59:03,2014-08-25 09:59:08
2014-08-25 09:59:04,2014-08-25 09:59:08

可以使用awk中的mktime函数进行计算

cat time.txt | awk -F, '{split($1, t, /[-/: ]+/)
  t[3] = t[3] > 69 ? 19 t[3] : 20 t[3]
  split($2, r, /[-/: ]+/)
  r[3] = r[3] > 69 ? 19 r[3] : 20 r[3]
  print $1","$2","mktime(t[3]" "t[1]" "t[2]" "t[4]" "t[5]" "t[6])-mktime(r[3]" "r[1]" "r[2]" "r[4]" "r[5]" "r[6])
  }'

打印出来的结果就是这样的:

2014-08-25 09:58:47,2014-08-25 09:58:51,-4
2014-08-25 09:58:49,2014-08-25 09:58:56,-7
2014-08-25 09:58:49,2014-08-25 09:58:57,-8
2014-08-25 09:58:50,2014-08-25 09:58:57,-7
2014-08-25 09:58:52,2014-08-25 09:58:56,-4
2014-08-25 09:58:52,2014-08-25 09:58:57,-5
2014-08-25 09:58:55,2014-08-25 09:59:02,-7
2014-08-25 09:58:58,2014-08-25 09:59:02,-4
2014-08-25 09:59:00,2014-08-25 09:59:07,-7
2014-08-25 09:59:00,2014-08-25 09:59:08,-8
2014-08-25 09:59:03,2014-08-25 09:59:07,-4
2014-08-25 09:59:03,2014-08-25 09:59:08,-5
2014-08-25 09:59:04,2014-08-25 09:59:08,-4