我有一个日志文件,其中每个条目都由一系列 分隔---
,类似于:
-----------------
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
它将文件作为单个字符串吞入,将其拆分为记录,查找匹配项,然后将其与记录分隔符的近似值连接起来。