将日志文件分成几部分并搜索错误

将日志文件分成几部分并搜索错误

我想将日志文件分成几部分,然后在这些部分中搜索错误。如果出现错误,我想将相关的日志文件片段放入另一个文件中。

小例子:

日志文件如下所示:

STARTLOG1
blabla
more_blabla
ENDLOG1
STARTLOG2
错误:Errortext这是 用户 XYZ 发出的
错误 ENDLOG2 STARTLOG3 blabla more_blabla ENDLOG3





我想将日志文件分成几部分。 STARTLOG 和 ENDLOG 之间的所有行都应该是 1 条。当片段中出现错误时,将整个片段提取到文件中。该文件应如下所示:

STARTLOG2
错误:Errortext这是 用户 XYZ ENDLOG2 的
错误

答案1

尝试这个:

$ awk -v RS="STARTLOG" '/ERROR/{print RS$0; }' log
STARTLOG2
ERROR: Errortext
This is an Error
from user XYZ
ENDLOG2

要重定向到名为 的文件(logN其中 N 是来自的数字)STARTLOG,请使用:

gawk -v RS="STARTLOG" '/ERROR/{print RS$0 > "log"$1; }' log

解释

RS是记录分隔符,它定义了“行”的含义awk。在这里,我将其设置STARTLOG为将整个记录视为一行。然后,如果该“行”包含ERROR,我将打印STARTLOGRS,这只是为了重新创建相同的格式)。

您还可以对 Perl 使用相同的方法:

perl -lne 'BEGIN{$/="STARTLOG"}{print "$/$_" if /ERROR/}' log 

相关内容