使用awk搜索带有日期时间戳的日志文件会生成语法错误

时间:2014-04-08 15:01:17

标签: awk

我需要搜索日期时间戳格式为2014-04-01 16:45:22.084的日志文件

我从grep到awk的管道,因为日志文件的标题行包含时间戳,然后是详细信息,我需要检查标题行。

当我使用字符串运行awk时,它可以工作。

    grep "2014-04-01" log |awk -F"\t" '{if ($1>"2014-04-01 14:02:41.213") print $1,$5;}'

2014-04-01 16:45:22.084 Generic_Remote_Exception

当我尝试使用日期变量时,我收到语法错误。

    grep "2014-04-01" log |awk -F"\t" -vDate= "`date -d 'now-5 minutes' +%Y-%m-%d" "%H:%M:%S.%N`" '{if ($1>Date) print $1,$5;}'

awk:2014-04-08 09:30:31.061837000 awk:^语法错误

为什么awk会产生错误?

2 个答案:

答案 0 :(得分:2)

改变这个:

awk -F"\t" -vDate= "`date -d 'now-5 minutes' +%Y-%m-%d" "%H:%M:%S.%N`" '{if ($1>Date) print $1,$5;}'

awk -F\t -v Date="$(date -d -5min +%Y-%m-%d" "%H:%M:%S.%N)" '$1>Date {print $1,$5}'

答案 1 :(得分:0)

awk -v Date="`date`" 'script'
在解释date之前,

将awk变量Date设置为shell命令script的输出。

awk -v Date= "`date`" 'script'

将awk变量Date设置为空字符串,然后尝试解释date的输出,因为它是awk脚本,因此语法错误,因为2014-04-08 09:30:31.061837000不是语法正确的awk脚本。