我是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:33到2015-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