在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"
答案 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的date
和ash
(现代可能/ 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时间戳并将其保存在start
,end
变量中。在脚本结束时,将计算和打印差异:
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