date:额外操作数%d'错误

Shu*_*kko 5 shell awk date

我有一个文本日志文件,格式如下

Thread-28689296: Thu Aug 25 15:18:41 2016 [ info ]: xxxxx xxxxxx xxxxx
Run Code Online (Sandbox Code Playgroud)

所以我想在最后几分钟运行cron job来查找某些错误消息.我写了以下命令

awk -vDate=`date +%b %d %H:%M:%S %Y` -vDate2=`date --date="2 minutes ago" +%b %d %H:%M:%S %Y` '$5 > Date && $5 < Date2' /var/log/dummy.log  | grep "Fatal"
Run Code Online (Sandbox Code Playgroud)

在上面的命令中,我使用字符串搜索具有时间戳和时间戳的消息Fatal.

但是我得到了以下错误

date: extra operand %d'
Try date --help' for more information.
date: extra operand %d'
Try date --help' for more information.
Run Code Online (Sandbox Code Playgroud)

如果我运行日期命令,我得到如下结果

date "+%b %d %H:%M:%S %Y"
Aug 25 15:25:01 2016

date --date="2 minutes ago" +"%b %d %H:%M:%S %Y" 
Aug 25 15:31:42 2016
Run Code Online (Sandbox Code Playgroud)

所以我的awk脚本中的日期命令应该没问题.

我还想将发现的错误消息重定向2分钟到一个文件以邮件作为警报,但我还没有那么远.

请告诉我我的awk脚本有什么问题.非常感谢提前!

fed*_*qui 8

这里的问题date本身就是问题.我们来看看如何.

你是说:

vDate2=`date --date="2 minutes ago" +%b %d %H:%M:%S %Y`
Run Code Online (Sandbox Code Playgroud)

因为你想使用

date --date="2 minutes ago" +%b %d %H:%M:%S %Y
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试运行它,您将看到您收到错误:

date:额外的操作数'%d'
尝试'date --help'以获取更多信息.

问题是您需要将FORMAT控件括在双引号内:

#                             v                  v
$ date --date="2 minutes ago" "+%b %d %H:%M:%S %Y"
Aug 25 14:49:31 2016
Run Code Online (Sandbox Code Playgroud)

完成后,您的完整awk单行内容可以是:

awk -v Date="$(date "+%b %d %H:%M:%S %Y")" \
    -v Date2="$(date --date="2 minutes ago" "+%b %d %H:%M:%S %Y")" \
     '$5 > Date && $5 < Date2' file
Run Code Online (Sandbox Code Playgroud)

注意我正在使用-v Date="$(date ...)":