如何提取符合条件的分隔条目?

如何提取符合条件的分隔条目?

我有一个日志文件,其中每个条目都由一系列 分隔---,类似于:

-----------------
Name=Operation1
Time: 100
Status=Success
-----------------
Name=Operation1
Time: 500
Status=Failure
-----------------
Name=Operation2
Time: 200
Status=Success
-----------------
Name=Operation2
Time: 800
Status=Failure
-----------------

我想提取符合特定条件的所有条目(即所有条目 whereName=Operation1或所有条目 where Status=Failure)。我想我可以使用 agrep 如下:agrep -d "---*" -e "Name=Operation1" mylogfile > myfilteredlogfile但在检查文件后,它似乎没有按我的预期进行过滤。我的过滤有什么问题以及如何提取我想要的条目?

答案1

如果您awk允许多字节记录分隔符,请尝试

awk -vRS="-----------------" -vORS="-----------------" '/Failure/' file

Name=Operation1
Time: 500
Status=Failure
-----------------
Name=Operation2
Time: 800
Status=Failure
-----------------

答案2

一些 Perl 怎么样:

perl -0777 -snE 'say join "---", grep {/$patt/i} split /^-+$/m' -- -patt="status=fail" file
Name=Operation1
Time: 500
Status=Failure
---
Name=Operation2
Time: 800
Status=Failure

它将文件作为单个字符串吞入,将其拆分为记录,查找匹配项,然后将其与记录分隔符的近似值连接起来。

相关内容