我有一个这样的日志文件;我现在可以得到=小时=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