我有一个文本日志文件,格式如下
Thread-28689296: Thu Aug 25 15:18:41 2016 [ info ]: xxxxx xxxxxx xxxxx
所以我想运行 cron 作业来查找最后几分钟内的一些特定错误消息。我写了以下命令
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"
在上面的命令中,我使用字符串搜索具有现在时间和 2 分钟前时间之间的时间戳的消息Fatal
.
但我收到以下错误
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 脚本有什么问题。预先非常感谢!
这里的问题是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’
尝试“date --help”以获取更多信息。
问题是您需要将 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 ...)"
:
-
$( )
对于过程替换,因为反引号 ` 几乎已被弃用, ir 至少被认为是遗留的 https://unix.stackexchange.com/a/126928/40596.
-
date=" things "
以防止内容有空格时出现错误。
-
v var=value
之后使用空格-v
, since -vvar=value
是 gawk 特有的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)