我想计算最近5分钟内与模式匹配的系统日志条目。
我可以对时间进行硬编码并获得预期的输出:
$ awk '$3>"16:20:00"' /var/log/syslog | grep "UFW BLOCK" | wc -l
1502
可以通过以下方式构造所需时间:
$ date --date='5 minutes ago' '+%H:%M:%S'
16:00:00
我如何将它们以单线方式加入?
我尝试设置环境变量,但是它返回整个日志。我看不到我的错误。
$ logdate=`date --date='5 minutes ago' '+%H:%M:%S'` && awk '$3>"$logdate"' /var/log/syslog | grep "UFW BLOCK"
答案 0 :(得分:2)
您可以使用:
awk -v dt="$(date --date='5 minutes ago' '+%H:%M:%S')" '$3>dt && /UFW BLOCK/' /var/log/syslog
请注意,如何也通过使用awk来执行搜索模式来避免倒数grep
。
答案 1 :(得分:1)
您的awk命令是单引号,它将禁用外壳程序的字符串插值。检查此类错误的一种简单方法是将awk
更改为echo
并查看其含义($3>"$logdate"
)。如果您使用双引号并适当地转义了字符("\$3>\"$logdate\""
,那么您将传递给awk
您想要的参数。
$ logdate=`date --date='5 minutes ago' '+%H:%M:%S'` && awk "\$3>\"$logdate\"" /var/log/syslog | grep "UFW BLOCK"