extrair a última partida do logfile até o final

2

Usando sed, grep, awk ou ruby, o que é uma maneira simples de encontrar a correspondência última de uma string em um arquivo de log maior, e enviar todas as linhas seguindo (inclusive) para outro arquivo ?

Exemplo:

grep -A222 "_____________" recent/toptrigs.OX.rb.log

é a minha solução mais próxima, já que 222 linhas de contexto do pós-texto devem sempre atingir EOF primeiro, exceto que eu quero que ele comece na última instância de " _ __ _ _ "string. É um arquivo de log crescendo simultaneamente a partir do mesmo processo (então eu manualmente libero STDOUT e STDERR no final do loop de cada item, com este segmento tendo em mente).

    
por Marcos 12.12.2012 / 11:25

2 respostas

4

Acho que a maneira mais fácil é reverter a entrada antes de corresponder:

<logfile tac | sed '/pattern/q' | tac
    
por 12.12.2012 / 11:31
2

Algumas opções aqui.

  • Você pode usar tac para inverter a ordem das linhas, depois fazer com que grep inclua a linha depois (agora antes como está invertida) e pará-lo após a primeira partida, então inverta-a novamente para restaurar a ordem, assim:

    tac /path/to/file | grep -m 1 -B 1 "mypattern" | tac
    
  • Exclua as linhas além da última correspondência e da seguinte linha:

    grep -A 1 "mypattern" /path/to/file | tail -n 2
    

Você deve tentar isso em seus arquivos para ver qual apresenta melhor desempenho no seu caso.

E você pode anexar a saída a um arquivo de log, prefixando os comandos com o redirecionamento de saída padrão >> /path/to/outputfile .

    
por 12.12.2012 / 11:37