grep 两个时间戳之间的数据

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

我想在之间 grep 日志2015-07-08 12:00:332015-07-10 21:00:31

我想我可以用我得到的这些代码来做到这一点这里,

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

答案1

由于您记录的时间戳不容易解析,因此您需要将其转换为某种可解析且可接受的格式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

相关内容