Linux
獲取具有特定時間戳的日誌文件的最後 X 分鐘
我正在嘗試通過 IPA 主機的日誌文件來獲取最後五分鐘的內容並獲取有關新使用者創建或 DNS 更改等內容的更新。我想 cron 這個,所以每五分鐘它會檢查前五分鐘,檢查並匹配一些字元串並通過電子郵件發送這些結果。我不知道如何輕鬆比較日誌中顯示的類型的字元串:
20200114184803 = 2020-01-14 | 18:48:03
time: 20200114184803 Stuff Stuff Stuff time: 20200114184804 Stuff Stuff Stuff time: 20200114184811 Stuff Stuff Stuff
awk
我已經在我的腳本中解決了這個問題:ONE_HOUR_AGO="$(date -d '1 hour ago' +%Y%m%d%H)" NOW="$(date +%Y%m%d%H)" awk '/time: '$NOW'/,/time: '$ONE_HOUR_AGO'/' log_file.txt
這解決了我與這些時間戳有關的問題,並且我能夠解析日誌文件。
我把它分解成幾個變數,但你可能可以下一步或更好地管道它:
fma=`date --date='5 minutes ago' +"%Y%m%d%H%M%S"` line_num=`tac file.txt | awk -v five_min_ago=$fma\ '(NF > 1 && $2 < five_min_ago ){print NR; exit 1}'` tail -$line_num file.txt
解釋:
fma=...``fma
說在五分鐘前以年、月、日、小時、分鐘、秒的格式儲存在 shell 變數date
中,這似乎是您的日誌所做的。line_num=...
說向後讀取文件並將其傳輸到awk
. 在awk
程序中將bash變數保存$fma
為five_minutes_ago
t 合格)並退出。將結果儲存為 shell 變數line_num
。- 最後,用於
tail
獲取最後line_num
幾行file.txt
注意:您將不得不調整檢查欄位的數量,因為那裡可能有不止“東西”,但這應該可以幫助您完成大部分工作。