Kev*_*rke 8 python logging awk grep
日志文件包含许多 Python 回溯。我只关心由于KevinCustomError
. 文件中可能有多个此类错误。
我如何使用grep
另一个流行的 unix 命令或其组合来转储特定错误的整个回溯?
这是一个示例日志文件。我想要这个文件的第 1-3 行。在真实的日志文件中,回溯要长得多。
Traceback (most recent call last):
File "<stdin>", line 1, in ?
KevinCustomError: integer division or modulo by zero
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)
这是我尝试组合在一起的 AWK 脚本。
awk '{a[NR]=$0}; /KevinCustomError/ {for(i=0; a[NR-i] !~ /Traceback/; i++) {} i++; while(i-- >= 0) {print a[NR-i]}}' logfile
Run Code Online (Sandbox Code Playgroud)
或者,以文件形式。
{a[NR] = $0};
{
if ($0 ~ /KevinCustomError/)
{
for (i = 0; a[NR-i] !~ /Traceback/; i++)
{}
i++
while (i-- >= 0)
{
print a[NR-i];
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法如下:awk -f logscript.awk logfile
.
对AWK不太熟悉,欢迎批评指正。基本上,它会跟踪到目前为止读取的所有行,并且仅向后搜索以查找“Traceback”标记(如果您愿意,可以替换它),然后打印其间的所有内容(以正确的顺序)。