我有一个日志文件,记录了日期、时间(小时、分钟、秒、毫秒)、车辆的速度以及车辆与我们车辆前后车辆之间的自由距离。如果车辆停下来,则它不会测量距离。
我的selfdriving.log
文件看起来像这样:
2021.04.01. 13:14:30:78 78 110 110
2021.04.01. 13:14:30:99 79 111 111
2021.04.01. 13:14:31:50 80 111 119
2021.04.01. 13:14:59:87 87 118 117
2021.04.01. 13:16:59:87 86 116 119
2021.04.01. 13:17:22:32 75 117 115
2021.04.01. 13:18:50:65 75 96 109
2021.04.01. 13:18:55:00 0 0 0
我要做的是编写一个脚本,返回日志条目在最后一个日志条目一分钟或多分钟后创建的次数(因此,如果我的计算正确,2
在这种情况下它应该返回)。我不明白如何grep
工作以及如何将返回值放入变量中。到目前为止,我已经尝试过:
#!/bin/sh
for i in "cat selfdriving.log"
do
grep (([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]:[0-9][0-9]
done
据我所知,评价不高。
答案1
必须比较时间的问题的解决方案是将日期时间转换为整数秒数。然后,如果您记得上一条记录的时间戳,则可以进行算术来查找大于 60 秒的差异。
GNU awk 有一些内置的时间函数
gawk -F'[. :]+' '
{timestamp = mktime($1" "$2" "$3" "$4" "$5" "$6)}
NR == 1 {prev = timestamp}
timestamp - prev >= 60 {print}
{prev = timestamp}
' selfdriving.log
2021.04.01. 13:16:59:87 86 116 119
2021.04.01. 13:18:50:65 75 96 109
要获取记录数,您可以
- 通过管道将输出输入
| wc -l
以获取计数,或者 - 在 awk 中进行计数并将结果打印在 END 块中。