Eu tenho um arquivo de log ao vivo chamado log.log e quero pegar alguns padrões e valores correspondentes:
Exemplo: O log.log está crescendo e estamos procurando por linhas que tenham o padrão "ResponseTime = VALUE" e queremos extrair o VALUE correspondente:
Estou executando:
tail -F log.log | grep ResponseTime | cut -d = -f 2 | tr -d " "
E eu estou esperando ver
VALUE1
VALUE2
.. etc
Mas não está funcionando ... o que devo fazer?
Obrigado, NaMo
===========
Obrigado, funciona agora. Estou usando: inotail -f log.log | stdbuf -oL grep ResponseTime | stdbuf -oL cut -d "=" -f 2 | stdbuf -oL tr -d ""
Respostas:
9 para resposta № 11 para resposta № 2
Tente mudar grep
para stdbuf -oL grep
.
Vejo BASHFAQ / 009 para detalhes.
1 para resposta № 3
A razão pela qual isso não está funcionando é que alguns comandos não liberam STDOUT com cada saída. Portanto, os comandos posteriores nunca estão sendo transmitidos.
Eu usaria apenas um comando depois tail
tal como:
tail -F t.log | sed "/ResponseTime/!d;s/ResponseTimes+=s+(d+)/\1/"
-2 para resposta № 4
Se você quiser remover novas linhas de sua saída, você pode fazer o seguinte:
| cut -d = -f 2|sed -e :a -e "$!N;s/n//;ta"
| cut -d = -f 2|tr -d "n"
| cut -d = -f 2|awk "{printf "%s",$0}"