1

我有一个看起来像这样的日志:

####<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 工具(非 GNU)编写的条目?

4

1 回答 1

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 并快速找到我的版本date

 date +%l
Sep 16 20:00

当然,调试输出显示我可能想将变量的输入 dbl 引用为 awk,因此,

 awk -F "<" -v MyDate="`TZ=MYT+6 date '+%b %d, %Y:%M:%S %Z'`" ' {if ($2 > MyDate) print $2}'

肯定应该更近。如果你这不能解决它,那么我会设置一个更详细的测试。

最后,我要评论说,我很惊讶包含混合格式(Sep/MYT)日期值的比较可以按您的需要工作,但我想翻译Sep 16, 2014 11:25:16 PM EST201409162325165有点令人头疼。

PS 同样使用反引号进行命令替换在 1995 年发布的“Kornshell 编程语言”中被标记为已弃用。加入 90 年代并使用$( ... cmd ...)命令替换 ;-)

IHTH

于 2014-09-17T02:00:01.930 回答