Solaris转换通过比较时间戳获取最后一小时的日志

时间:2014-09-17 01:48:01

标签: awk solaris nawk

我有一个如下所示的日志:

####<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)列出过去一小时内写入的条目?

1 个答案:

答案 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