日期输出作为命令行参数

时间:2019-01-04 16:49:48

标签: bash

我想计算最近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"

2 个答案:

答案 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"
相关问题