將日誌檔案分成幾部分並蒐索錯誤

將日誌檔案分成幾部分並蒐索錯誤

我想將日誌檔案分成幾部分,然後在這些部分中搜尋錯誤。如果發生錯誤,我想將相關的日誌檔案片段放入另一個檔案。

小例子:

日誌檔如下所示:

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 

相關內容