Como mostrar as linhas pesquisadas, bem como o número de ocorrências da string pesquisada?

1

Estou trabalhando em um script que mostrará todos os resultados e sua contagem no console com base em uma string específica.

Exemplo: Suponha que eu procurei por uma string chamada "ERROR", eu obtive os resultados abaixo, aqui o número da ocorrência de ERROR é 5.

2013-12-08 13:43:07 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-01-08 13:43:06 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-02-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)
2014-03-08 13:43:03 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-04-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)

Eu quero mostrar os logs e o número de ocorrências (linhas). Eu escrevi este script abaixo para mostrar os logs:

(zgrep -E "ERROR|Exception" $SS_HOME/logs/*.gz $PROBE_HOME/logs/*.gz $RELAY_HOME/logs/*.gz ;find . -type f -name "*.log" -exec cat {} +) | grep -F ERROR | sort

Eu não sei como adicionar a contagem das linhas. Por favor me avise para qualquer informação adicional.

    
por user112232 18.05.2015 / 07:56

2 respostas

1

Para mostrar linhas correspondentes, conte-as e mostre a contagem com awk :

awk '/ERROR/{err++; print} END{print "errors:", err}'

Para resumir erros e exceções:

awk '/ERROR/||/Exception/{faults++; print} END{print "faults:", faults}'

Para contar erros e exceções separadamente:

awk '/ERROR/{err++; print} /Exception/{exc++; print}
     END{print "errors:", err, "exceptions:", exc}'

Nota: Os programas awk funcionam como filtro, eles lêem da entrada padrão e gravam na saída padrão, mas você também pode fornecer os arquivos de dados como argumentos. Então, para usar é (como solicitado no comentário abaixo) com um ou mais arquivos de log use awk '...' *.log , ou se você quiser um ou mais arquivos gz descompactados antes de analisá-los com awk use, por exemplo, zcat *.gz | awk '...' ( onde você substitui qualquer um dos programas awk acima por awk '...' ).

    
por 18.05.2015 / 15:11
0

Basta usar o comando wc com a opção -l :

wc -l

Se você deseja imprimir os logs também, você pode usar tee :

cat logs.txt | grep -i error | tee >(wc -l)
    
por 18.05.2015 / 08:07