Shell-Script
計算下一個日誌條目比上一個日誌條目在一分鐘或多分鐘後出現的次數
我有一個日誌文件,其中記錄了日期、時間(小時、分鐘、秒、毫秒)、車輛的速度以及車輛與車輛前後車輛之間的自由距離。如果車輛停止,則不會測量距離。
我的
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
要獲取記錄數,您可以
- 將輸出輸入管道
| wc -l
以獲取計數,或- 在 awk 中進行計數並在 END 塊中列印結果。