【问题标题】:Using AWK to Retrieve an Error in a Cryptic Log File使用 AWK 检索神秘日志文件中的错误
【发布时间】:2017-07-20 01:42:24
【问题描述】:

我需要获取当前时间发生的错误,忽略早期发生的错误。问题是日期在上面几行(与错误代码不在同一行)。如何从

返回信息
***begin ibmdb error message*** 

它具有与当前时间相等的日期和时间,并包括所有这些错误日志数据:

*** begin ibmdb error message ***
Sun Dec 18 21:50:57 2016 - program 'execjob', User 'OSID:root', RMId 'root'  Driver Version '9.0.1.14.865 2015-01-20 04:00:00'
DELETEDBREC() error on file 'USERRPT' in 'GEN'

DeleteSqlRec(lawson."USERRPT", 1)
DB2 FATAL ERROR for SQLExecute - Code: 40001/-911
[IBM][CLI Driver][DB2/AIX64] SQL0911N  The current transaction has been rolled
back because of a deadlock or timeout.  Reason code "68".  SQLSTATE=40001

awk 'BEGIN{FS="begin ibmdb error message"} 捕获开头 - 我如何封装结尾 - Reason code "68"

【问题讨论】:

  • AWK 是面向记录的。如果您无法定义记录,请将行从您的起始模式附加到变量,直到您点击Reason code "68"
  • 我明白了 - 所以我作为示例给出的输出将是多条记录,而 AWK 无法将这些部分作为一条记录检索。
  • 有些 awk 可以使用正则表达式来分割记录,有些则不能。 GNU awk certainly can.从你的问题中也不清楚是否穿插了其他记录。所以附加行通常是一个安全的后备。 YMMV。

标签: awk aix


【解决方案1】:

FS 告诉 awk 你的行中的字段将被 'begin ibmdb error message' 分隔

你可能想做类似的事情

awk '/begin ibmdb error message/,/Reason code "68"/'

【讨论】:

  • 在我写我的答案之前,我实际上已经看到了你的答案。但我不明白你的回答。 :-)
  • 不同的是我回答了 OP 的问题。
【解决方案2】:

这样的?我从只是为了测试的时间点开始,而不是begin ibmdb error message,因为我认为可能会有更多的部分以相同的文本开头。

$ awk '/21:50/,/Reason code "68"/' file11
Sun Dec 18 21:50:57 2016 - program 'execjob', User 'OSID:root', RMId 'root'  Driver Version '9.0.1.14.865 2015-01-20 04:00:00'
DELETEDBREC() error on file 'USERRPT' in 'GEN'

DeleteSqlRec(lawson."USERRPT", 1)
DB2 FATAL ERROR for SQLExecute - Code: 40001/-911
[IBM][CLI Driver][DB2/AIX64] SQL0911N  The current transaction has been rolled
back because of a deadlock or timeout.  Reason code "68".  SQLSTATE=40001

提示:您可以在此处查看 awk 中有关模式匹配的功能:https://www.gnu.org/software/gawk/manual/html_node/Expression-Patterns.html

【讨论】:

  • 这有效:awk '!/incompatible with type Alpha/'ladb.log 但是为什么这不起作用:awk'!/incompatible with type Alpha/ && /begin ibmdb error message/,/Reason代码“68”/'ladb.log 对于我来说,它不允许我在使用 && 时排除。它返回 Alpha 行。
  • @Configueroa alpha 行是否包含在/begin ibmdb error message/,/Reason code "68"/ 范围内?
  • @Configueroa 我想是的。您正在将行范围与和/不是引用该范围中存在的记录的表达式混合。这将起作用:awk '/begin ibmdb error message/,/Reason code "68"/{if ($0 !~ /type Alpha/) print}' file11
  • @Configueroa 好吗?
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2014-05-21
相关资源
最近更新 更多