我有一个如下所示的日志:
####<Sep 16, 2014 6:12:45 PM EST> <Notice> <StdErr> <myserver> <myinstance> <[ACTIVE] ExecuteThread: '17' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1410913515898> <BEA-000000> <at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)>
####<Sep 16, 2014 9:45:08 PM EST> <Notice> <StdErr> <myserver> <myinstance> <[ACTIVE] ExecuteThread: '17' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1410913515898> <BEA-000000> <at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)>
####<Sep 16, 2014 10:27:26 PM EST> <Notice> <StdErr> <myserver> <myinstance> <[ACTIVE] ExecuteThread: '17' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1410913515898> <BEA-000000> <at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)>
####<Sep 16, 2014 11:25:16 PM EST> <Notice> <StdErr> <myserver> <myinstance> <[ACTIVE] ExecuteThread: '17' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1410913515898> <BEA-000000> <at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)>
让我们说时间是美国东部时间晚上11:26。我只想获得最后一小时写的条目。我之前使用过类似的东西:
nawk -F "<" -v MyDate=`TZ=MYT+6 date "+%b %d, %Y%l:%M:%S %Z"` ' {if ($2 > MyDate) print $2}'
但是在尝试运行时遇到以下错误:
nawk: syntax error at source line 1
context is
>>> 16, <<<
nawk: bailing out at source line 1
如何使用Solaris工具(NOT GNU)列出过去一小时内写入的条目?
答案 0 :(得分:1)
set -vx
会让你自由; - )
执行时
print -- "####<Sep 16, 2014 11:25:16 PM EST> <Notice> <StdErr> <myserver> " \
| awk -F "<" -v MyDate=`TZ=MYT+6 date "+%b %d, %Y%l:%M:%S %Z"` ' {if ($2 > MyDate) print $2}'
(我使用ksh,它的打印功能非常方便,在这些情况下你通常可以用echo
代替打印)。
我得到了一个非常相似的错误信息
awk: syntax error at source line 1
context is
>>> <<<
awk: bailing out at source line 1
当我发出set -vx
时,我可以看到将要执行的内容以及替换环境变量的内容。哪个告诉我
1>awk -F '<' -v MyDate=Sep 16, 2014Sep 16 19:59:59:12 MYT ' {if ($2 > MyDate) print $2}'
注意'Sep 16'是如何重复的?
我可以在我的系统上执行man date
,或者因为这可能有问题,我会尝试每个%
args,我不认识,并快速找到我的版本{{1 },
date
当然,调试输出显示我可能想要将变量的输入引用到awk,因此,
date +%l
Sep 16 20:00
绝对应该更接近。如果你没有解决它,那么我将设置一个更详细的测试。
最后,我评论说我很惊讶包含混合格式(Sep / MYT)日期值的比较可以根据需要工作,但我想将 awk -F "<" -v MyDate="`TZ=MYT+6 date '+%b %d, %Y:%M:%S %Z'`" ' {if ($2 > MyDate) print $2}'
翻译成Sep 16, 2014 11:25:16 PM EST
有点像头疼。
P.S。在1995年发布的'Kornshell编程语言'中,使用back-ticks命令替换被标记为已弃用。加入90s并使用201409162325165
命令替换; - )
IHTH