日志文件处理

日志文件处理

在此输入图像描述 我有一个这样的日志文件;我现在可以得到=小时=date +'%H'

我可以使用 cat 文件之类的东西获得以小时为单位的登录时间 | awk '{print $2}' |剪切-d:-f1

有没有办法可以将文件中的登录时间(以小时为单位)与当前时间(以小时为单位)进行比较,并判断登录时间是否> 5 小时并仅显示符合该条件的记录。

假设现在是下午 3 点,即 15 小时,我们不想在下面显示,因为登录时间少于 5 小时

11:26:16 登录.成功 yden8703 gkU3Qx4iiWPVMrV

12:26:24 登录.成功 pxia9495 2OVvMrAmgRAOZyJ

答案1

 awk -v argsec=$((5*60*60)) '
        BEGIN{ nowsec=systime() }
      { logsec=mktime(gensub(/[-:]/," ","g",$1" "$2));
        if(nowsec-logsec<=argsec) print;
      }' logfile

您可以将 5 小时到秒的转换放在 awk 的BEGIN块中,但将其放在 arg 变量中似乎更灵活。

答案2

要从日志文件中获取第 2 列中时间大于 05:00:00 的登录行,请尝试:

awk '$2+0>=5' logfile

相关内容