繁体   English   中英

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

[英]How can you can calculate the time span between two time entries in a file using a shell script?

在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"

您应该可以使用这样的date (例如)

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

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

这有帮助吗?

如果您有GNU的date (而不是busybox的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"

我会用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM