如何使用shell脚本计算文件中两个时间条目之间的时间跨度?

时间:2014-07-16 19:18:15

标签: linux unix

在Linux脚本中:我有一个文件,其中包含文件中每条消息的两个时间条目。 “收到的时间”和“来源时间”。文件中有数百条消息。

我想计算两次之间的经过时间。

2014-07-16T18:40:48Z  (received time)
2014-07-16T18:38:27Z  (source time)

源时间是收到时间后的3行,并不重要。

有关输入数据的信息:

输入的行如下:

TimeStamp:        2014-07-16T18:40:48Z  

2行之后:一​​行中和每行内的一堆消息,多次是:

sourceTimeStamp="2014-07-16T18:38:27Z"

3 个答案:

答案 0 :(得分:1)

你应该可以像这样使用date(例如)

date +%s --date="2014-07-16T18:40:48Z"

将两个时间戳转换为unix时间戳。然后将它们之间的时间差减少到简单的减法。

这有帮助吗?

答案 1 :(得分:1)

如果您拥有GNU的date(非繁忙框),您可以在几秒钟内给出差异:

#!/bin/bash
A=$(date -d '2014-07-16T18:40:48Z' '+%s')
B=$(date -d '2014-07-16T18:38:27Z' '+%s')
echo "$(( A - B )) seconds"

对于busybox的dateash(现代可能/ BusyBox v1.21.0):

#!/bin/ash
A=$(busybox date -d '2014-07-16 18:40:48' '+%s')
B=$(busybox date -d '2014-07-16 18:38:27' '+%s')
echo "$(( A - B )) seconds"

答案 2 :(得分:1)

我会使用awk。以下脚本搜索感兴趣的行,将时间值转换为UNIX时间戳并将其保存在startend变量中。在脚本结束时,将计算和打印差异:

timediff.awk

/received time/ {
    "date -d "$1" +%s" | getline end 
}

/source time/ {
    "date -d "$1" +%s" | getline start
     exit
}

END {
    printf "%s seconds in between", end - start
}

执行它:

awk -f timediff.awk log.file

输出:

141 seconds in between