Separando a saída de greps no sentido horário

0

Vamos supor que eu tenha um programa que promova muita informação. Estou interessado em apenas 3 mensagens que aparecem sempre uma após a outra. Eu quero agora grep estas linhas e separá-las das próximas 3 mensagens que correspondem ao meu padrão.

O que eu tenho até agora é a seguinte linha de comando:

./myproc | grep -e "pattern1|pattern2|pattern3" | awk '{print $0,"\n"}'

No entanto, isso produz algo parecido com isso

line 1

line 2 

line 3

line 1

line 2 

line 3

Mas o que eu quero deve ser assim:

line 1
line 2
line 3

line 1
line 2
line 3
    
por muXXmit2X 10.03.2016 / 15:28

1 resposta

1

Primeiro, você não deve e não deve usar o grep quando você passar a saída para o awk, porque o awk sabe o que o grep sabe e ainda mais.

Em seguida, a instrução de impressão do awk (ao contrário de printf () em C ou print em perl) imprime nova linha após o valor automaticamente (embora awk também tenha seu próprio printf, o que não ocorre).

E último bnl, se você quiser apenas imprimir o registro inteiro (aqui: linha), você não precisa nem especificá-lo.

Agora, você deve tentar isto:

./myproc | awk '/pattern1/,/pattern3/ {print}; /pattern3/ {print ""}'

E você deve ler sobre range pattern em man awk .

    
por 10.03.2016 / 15:43