【问题标题】:get all the exception within specific time range with help of awk借助 awk 在特定时间范围内获取所有异常
【发布时间】:2014-01-26 13:35:17
【问题描述】:

我对@9​​87654321@ 非常陌生,并且正在努力找出特定时间范围内的所有异常。

以下是日志,

[2014-01-26 00:16:54.244][VendorProductFileProcessor-process-1][WARN] [VendorProductFileTranslatorTask:210] Failed to process vendor data: {INTERNALCASHBACKSNAPDEALSPONSOREDPERCENTAGE=#REF!, VENDOR CODE=#REF!, INTERNALCASHBACKENDDATE=#REF!, INTERNALCASHBACKTYPEVALUE=#REF!, EXTERNALCASHBACKSTARTDATE=#REF!, SKU=#REF!, EXTERNALCASHBACKTYPEVALUE=#REF!, EXTERNALCASHBACKENDDATE=#REF!, EXTERNALCASHBACKTYPE=#REF!, EXTERNALCASHBACKSNAPDEALSPONSOREDPERCENTAGE=#REF!, INTERNALCASHBACKSTARTDATE=#REF!, INTERNALCASHBACKTYPE=#REF!}, com.snapdeal.coms.exception.RuntimeErrorException: COMS-1113: Failed to translate attribute : intCashbackTotalValue value: Unparseable number: "#REF!"

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

grep Exception coms-core.log | gawk -F '[' '{ if ($2 ~ \2014-01-26 00:[0-59]:[0-59]\)print $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 |头-1 | gawk -F '[' ' $2 ~ /^2014-01-26 [00]:[0-59]/ {print $2}'

【问题讨论】:

    标签: bash awk gawk


    【解决方案1】:

    试试这个 awk:

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

    【讨论】:

    • 1 个小疑问 [readlog@coms01 coms-core]$ grep Exception coms-core.log |头-1 | gawk -F '[' ' $2 ~ /^2014-01-26 [00:01]/ {print $2}' 2014-01-26 00:16:54.244] 但是当我尝试给出分钟范围时正则表达式 grep 异常 coms-core.log |头-1 | gawk -F '[' ' $2 ~ /^2014-01-26 [00]:[0-59]/ {print $2}' 我没有得到任何结果。任何提示我做错了什么
    • 实际上您的正则表达式在给出分钟范围时是错误的。请记住,它不是数字范围,而是正则表达式范围。您的代码很难从 cmets 中读取,如果您在问题中发布代码,那么我当然可以建议您修复。
    • 您可以只使用$2 ~ /^2014-01-26 00:/ 而无需指定00-59 分钟范围,因为我们只需要特定小时的日志。
    • 是的,实际上我想计算每分钟的总异常数。
    • 那么你需要:$2 ~ /^2014-01-26 00:(0[0-9]|[1-5][0-9])/ 匹配00:00 - 00:59
    【解决方案2】:

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

    【讨论】:

    • 使用正向 slesh 后,我遇到了异常 [readlog@coms01 coms-core]$ grep Exception coms-core.log |头-1 | gawk -F '[' '{ if ($2 ~ '/2014-01-26 00:[0-59]:[0-59]/') 打印 $2}' gawk: { if ($2 ~ /2014-01 -26 gawk: ^ 未终止的正则表达式 gawk: cmd.line:1: { if ($2 ~ /2014-01-26 gawk: cmd.line:1: ^ 意外的换行符或字符串结尾
    • ' 在那里做什么?
    • 我犯了愚蠢的错误。感谢 karloy 在这里帮助我。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2013-09-12
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多