Linux

獲取具有特定時間戳的日誌文件的最後 X 分鐘

  • January 16, 2020

我正在嘗試通過 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

解釋:

  1. fma=...``fma說在五分鐘前以年、月、日、小時、分鐘、秒的格式儲存在 shell 變數date中,這似乎是您的日誌所做的。
  2. line_num=...說向後讀取文件並將其傳輸到awk. 在awk程序中將bash變數保存$fmafive_minutes_agot 合格)並退出。將結果儲存為 shell 變數line_num
  3. 最後,用於tail獲取最後line_num幾行file.txt

注意:您將不得不調整檢查欄位的數量,因為那裡可能有不止“東西”,但這應該可以幫助您完成大部分工作。

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