Como extrair entradas delimitadas que correspondem aos critérios? [duplicado]

0

Eu tenho um arquivo de log em que cada entrada é delimitada por uma série de --- , semelhante a:

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

Gostaria de extrair todas as entradas correspondentes a determinados critérios (por exemplo, todas as entradas em que Name=Operation1 ou todas as entradas foram Status=Failure ). Eu pensei que eu poderia usar agrep da seguinte forma: agrep -d "---*" -e "Name=Operation1" mylogfile > myfilteredlogfile mas depois de inspecionar o arquivo ele não parece filtrar como eu esperava. O que há de errado com minha filtragem e como posso extrair minhas entradas desejadas?

    
por chemdog95 27.09.2018 / 20:33

2 respostas

0

Se o seu awk permitir separadores de registros multibyte, tente

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

Name=Operation1
Time: 500
Status=Failure
-----------------
Name=Operation2
Time: 800
Status=Failure
-----------------
    
por 27.09.2018 / 23:28
0

Que tal um pouco de 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

Isso transforma o arquivo em uma única string, divide-o em registros, localiza as correspondências e, em seguida, associa-o a uma aproximação do separador de registros.

    
por 28.09.2018 / 02:06