gpt4 book ai didi

regex - awk/正则表达式 : parsing error logs not always returned error description

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:02 25 4
gpt4 key购买 nike

我最近请求帮助从一组日志文件中解析出 Java 错误堆栈,并在下面的链接中得到了一个非常好的解决方案(使用 awk)。

Pull out Java error stacks from log files

我将问题标记为已回答,经过一些调试和研究后,我发现了一些潜在的问题,因为它们与我最初的问题无关,而是由于我对 awk 和正则表达式的理解有限,我认为最好问一下一个新问题。

解决方法如下:

BEGIN{ OFS="," }
/[[:space:]]+*<Error / {
split("",n2v)
while ( match($0,/[^[:space:]]+="[^"]+/) ) {
name = value = substr($0,RSTART,RLENGTH)
sub(/=.*/,"",name)
sub(/^[^=]+="/,"",value)
$0 = substr($0,RSTART+RLENGTH)
n2v[name] = value
print name value
}
code = n2v["ErrorCode"]
desc[code] = n2v["ErrorDescription"]
count[code]++
if (!seen[code,FILENAME]++) {
fnames[code] = (code in fnames ? fnames[code] ", " : "") FILENAME
}
}
END {
print "Count", "ErrorCode", "ErrorDescription", "Files"
for (code in desc) {
print count[code], code, desc[code], fnames[code]
}
}

我遇到的一个问题是并非所有 ErrorDescriptions 都被捕获。例如,这个错误描述出现在这个脚本的输出中:

ErrorDescription="Database Error."

但是这个错误描述并没有出现在结果中(从实际日志文件复制的描述):

ErrorDescription="Operation not allowed for reason code &quot;7&quot; on table &quot;SCHEMA.TABLE&quot;.. SQLCODE=-668, SQLSTATE=57016, DRIVER=4.13.127"

这个也没有:

ErrorDescription="Cannot Find Person For Given Order."

似乎大多数错误描述不是由该脚本返回的,而是存在于日志文件中。我不明白为什么会出现一些错误描述而有些则不会。有人有什么想法吗?

编辑 1:

这是我正在解析的 XML 示例:

    <Errors>
<Error ErrorCode="ERR_0139"
ErrorDescription="Cannot Find Person For Given Order." ErrorMoreInfo="">
...
...
</Error>
</Errors>

最佳答案

脚本中的模式与您的数据不匹配:

/[[:space:]]+*<Error / {

详细信息:

  • “+”告诉它至少匹配一个空格。
  • “错误”之后的空格告诉它匹配另一个空格 - 但您的数据在“=”之前没有空格。
  • “<”是不必要的(但不是问题的一部分)。

这会是一个更好的模式:

/^[[:space:]]*ErrorDescription[[:space:]]*=[[:space:]]*".*"/

关于regex - awk/正则表达式 : parsing error logs not always returned error description,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com