日期:额外的操作数%d'错误

时间:2016-08-25 12:38:23

标签: shell date awk

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

Thread-28689296: Thu Aug 25 15:18:41 2016 [ info ]: xxxxx xxxxxx xxxxx

所以我想在最后几分钟运行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"

在上面的命令中,我使用字符串Fatal搜索时间间隔为2到2分钟之前的消息。

但我收到以下错误

date: extra operand %d'
Try date --help' for more information.
date: extra operand %d'
Try date --help' for more information.

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

这里的问题是date本身。让我们看看如何。

你在说:

vDate2=`date --date="2 minutes ago" +%b %d %H:%M:%S %Y`

因为你想使用

date --date="2 minutes ago" +%b %d %H:%M:%S %Y

但是,如果您尝试运行它,则会发现您收到错误:

  

日期:额外操作数'%d'
  试试约会 - 帮助&#39;了解更多信息。

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

#                             v                  v
$ date --date="2 minutes ago" "+%b %d %H:%M:%S %Y"
Aug 25 14:49:31 2016

完成此操作后,您的完整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

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