Bash 借助awk获取特定时间范围内的所有异常

Bash 借助awk获取特定时间范围内的所有异常,bash,awk,gawk,Bash,Awk,Gawk,我对awk非常陌生,一直在努力找出特定时间范围内的所有异常 下面是日志 [2014-01-26 00:16:54.244][VendorProductFileProcessor-process-1][WARN][VendorProductFileTranslatorTask:210]无法处理供应商数据:{INTERNALCASHBACKSNAPDEALSPONSOREDPERCENTAGE=#REF!,供应商代码=#REF!,INTERNALCASHBACKENDDATE=#REF!,INTER

我对
awk
非常陌生,一直在努力找出特定时间范围内的所有异常

下面是日志

[2014-01-26 00:16:54.244][VendorProductFileProcessor-process-1][WARN][VendorProductFileTranslatorTask:210]无法处理供应商数据:{INTERNALCASHBACKSNAPDEALSPONSOREDPERCENTAGE=#REF!,供应商代码=#REF!,INTERNALCASHBACKENDDATE=#REF!,INTERNALCASHBACKTYPEVALUE=#REF!,EXTERNALCASHBACKSTARTDATE=#REF!,SKU=#REF!,EXTERNALCASHBACKTYPEVALUE=#REF!,EXTERNALCASHBACKENDDATE=#REF!,EXTERNALCASHBACKTYPE=#REF!,ExternalCashBacksoredPercentage=#REF!,CashBacksoredPercentage=#InternalCashBackstarted=#REF!,INTERNALCASHBACKTYPE=#REF!},com.snapdeal.coms.exception.RuntimeErrorException:coms-1113:转换属性失败:intCashbackTotalValue:不可解析的数字:“#REF!”

现在我正在尝试打印过去1小时内发生的所有异常。我正在使用下面的
awk
命令

grep Exception-coms-core.log | gawk-F'[''{if($2~\2014-01-26 00[0-59]:[0-59]\)打印$2}'

但我在执行时遇到异常

gawk: { if ($2 ~ \2014-01-26 00:[0-59]:[0-59]\)print $2}
gawk:            ^ backslash not last character on line
有人能帮我吗

在anubhava的回答的帮助下使用下面的awk脚本,但当我尝试使用分钟范围作为正则表达式时,它现在起作用了


grep异常coms-core.log | head-1 | gawk-F'[''$2~/^2014-01-26[00]:[0-59]/{print$2}'

正则表达式用正斜杠(
/expr/
)表示。

试试这个awk:

gawk -F '[' '$0 ~ /Exception/ && $2 ~ /^2014-01-26 16:/ {print $2}' coms-core.log
  • 您不需要grep,因为awk也可以处理该部分
  • 您的awk语法不正确

使用find命令查找过去1小时内的异常-


find.-maxdepth 1-mmin-60-name'coms core.log'-exec grep-wi'exceptions'{}\;2>/dev/null

在使用forward slesh后,我在异常下面[readlog@coms01coms core]$grep Exception coms-core.log | head-1 | gawk-F'['{if($2~'/2014-01-26 00[0-59]:[0-59]/')打印$2}'gawk:{if($2~/2014-01-26 gawk:^unterminated regexp gawk:cmd.line:1:{if($2~/2014-01-26 gawk:cmd.line:1:^意外换行或字符串结尾“在那里做什么?我犯了个愚蠢的错误。感谢karloy在这里帮助我。一个小小的疑问[readlog@coms01通信核心]$grep Exception-coms-core.log | head-1 | gawk-F'['$2~/^2014-01-26[00:01]/{print$2}'2014-01-26 00:16:54.244]但是当我试图用正则表达式grep Exception-coms-core.log给出分钟范围时,head-1 | gawk-F'[''$2~/^2014-01-26[00]:[0-59]/{print$2}“我没有得到任何结果。任何提示我做错了什么事实上你的正则表达式给出的分钟范围是错误的。记住它不是数字范围,它是正则表达式范围。你的代码很难从评论中读取,如果你在问题中发布代码,我当然可以建议你修复。你可以使用
$2~/^2014-01-26 00://
和don“不需要指定
00-59
分钟范围,因为我们只需要特定小时的日志。是的,实际上我想获得每分钟的总异常计数。然后您需要:
$2~/^2014-01-26 00:(0[0-9]|[1-5][0-9])/
进行匹配
00:00
-
00:59