Como alinhar e grep o arquivo de log, combinar em uma única linha e passar como argumento para outro comando

1

Usando o seguinte comando, consegui buscar mensagens de erro abaixo (são 3 linhas).

$ tail -f -n 0 error.log | grep -A2 --line-buffered "Internal server error"
! @79884flo2 - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[Missing: No configuration setting found for key init.default]

Tentei poucas técnicas para combinar os logs em uma única linha e com sucesso:

  1. xargs

    tail -f -n 0 error.log | grep -A2 --line-buffered "error" | xargs -I @ printf "%s" "@"
    
  2. awk

    tail -f -n 0 error.log | grep -A2 --line-buffered "error" | awk '{ printf("%s ", $0); }'
    
  3. paste :

    tail -f -n 0 error.log | grep -A2 --line-buffered "error" | paste -d " " - - -
    

Em seguida, quero enviar a saída para o telegrama usando o comando telegram-notify :

telegram-notify --error --title "<title>" --text "<output from above command goes here>"

O melhor que posso fazer no momento é enviar cada linha dos logs separadamente usando xargs para telegrama.

tail -f -n 0 error.log | grep -A2 --line-buffered "error" | xargs -L 3 -I {} telegram-notify --error --title "<title>" --text "{}"

Por favor, avise:

  1. Qual comando entre os três xargs , awk , paste que eu tentei acima deve ser usado para linhas combinadas?

  2. Como canalizar mais ou passar a saída da xargs / awk / paste para a telegram-notify command --text option

por Rashidee Mohd Rashid 11.09.2018 / 10:23

0 respostas

Tags