[英]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的的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"
我会用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.