![计算下一个日志条目比上一个日志条目晚一分钟或多分钟出现的次数](https://linux22.com/image/198084/%E8%AE%A1%E7%AE%97%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%97%A5%E5%BF%97%E6%9D%A1%E7%9B%AE%E6%AF%94%E4%B8%8A%E4%B8%80%E4%B8%AA%E6%97%A5%E5%BF%97%E6%9D%A1%E7%9B%AE%E6%99%9A%E4%B8%80%E5%88%86%E9%92%9F%E6%88%96%E5%A4%9A%E5%88%86%E9%92%9F%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0.png)
我有一个日志文件,记录了日期、时间(小时、分钟、秒、毫秒)、车辆的速度以及车辆与我们车辆前后车辆之间的自由距离。如果车辆停下来,则它不会测量距离。
我的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 块中。