/ / tail -F log.log | grep ResponseTime | corte -d = -f 2 - bash, unix, pipe

cauda -F log.log | grep ResponseTime | corte -d = -f 2 - bash, unix, pipe

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 № 1

BASH FAQ entry # 9: "O que é buffering? Ou, por que minha linha de comando não produz saída: tail -f logfile | grep" foo bar "| awk ..."


1 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}"