Linux

grep 兩個時間戳之間的數據

  • October 16, 2022

我是 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:332015-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

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