Shell-Script

計算下一個日誌條目比上一個日誌條目在一分鐘或多分鐘後出現的次數

  • November 7, 2021

我有一個日誌文件,其中記錄了日期、時間(小時、分鐘、秒、毫秒)、車輛的速度以及車輛與車輛前後車輛之間的自由距離。如果車輛停止,則不會測量距離。

我的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

我知道這並沒有太多的評價。

必須比較時間的問題的解決方案是將日期時間轉換為整數秒數。然後,如果您記得上一條記錄的時間戳,您可以通過算術找到大於 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

要獲取記錄數,您可以

  1. 將輸出輸入管道| wc -l以獲取計數,或
  2. 在 awk 中進行計數並在 END 塊中列印結果。

引用自:https://unix.stackexchange.com/questions/676508