Linux
grep 兩個時間戳之間的數據
我是 linux 的初學者。
Oct 07 11:00:33 some text Oct 07 12:00:33 some text Oct 08 14:00:33 some text Oct 08 21:00:33 some text Oct 09 21:00:33 some text
我想在2015-07-08 12:00:33到2015-07-10 21:00:31之間 grep 日誌
我想我可以用我從這裡得到的這些程式碼來做到這一點,
sudo awk -v start='2015-07-08 12:00:33' -v end='2015-07-10 21:00:31' ' BEGIN{ gsub(/[:-]/," ", start); gsub(/[:-]/," ", end) } { dt=$1" "$2; gsub(/[:-]/," ", dt) } mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)' a.txt
我已經對其進行了測試,當日誌日期時間格式為
2015-10-09 21:00:33
但我的日誌日期時間格式是
Oct 09 21:00:33
所以我不知道如何將其轉換為
2015-10-09 21:00:33
由於您記錄的時間戳不易解析,因此您需要將其轉換為一些可解析且可接受的格式到mktime() 函式,*
YYYY MM DD HH MM SS
*因為您缺少 YYYY 部分,因此我們添加了一個虛擬年份為“2022”在下面的程式碼中。還有一個使用者定義的 month2num() 函式,它將月份名稱轉換為相應的月份編號。
gawk -v year='2022' -v start='2022 10 07 12 00 33' -v end='2022 10 08 21 00 31' ' function month2num(mon ){ return sprintf("%02d", (index("JanFebMarAprMayJunJulAugSepOctNovDec", mon)+2)/3) } { dt=year" "month2num($1)" "$2" "$3; gsub(/[:-]/," ", dt) } mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)' infile
輸出:
Oct 07 12:00:33 some text Oct 08 14:00:33 some text