Atribua fluxo contínuo à variável e processe a variável

1

Estou tentando fazer um analisador para um log personalizado que eu tenho.

Meu arquivo de log tem um carimbo de data e hora de duração (em ms) que eu quero filtrar dos outros e me envia os logs que assumem um carimbo de data / hora de limite por email ou IM.

Atualmente, estou atribuindo a saída de um comando tail -f canalizado com muitos outros comandos para uma variável e, em seguida, tentando processar o valor na variável. Mas eu não tive sucesso em simplesmente echo do log.

Aqui está a forma mais simples do script que estou usando:

log=$(tail -f $logFile | grep ms | rev | cut -c 3- | rev | awk '{ if($NF > $monitorTreshold) {  print $0 }  }')
for q in log; do
  echo "Query : $q"
done
    
por shine 13.07.2016 / 20:43

1 resposta

4

Como Kusalananda menciona, o pipeline nunca sairá e, portanto, $log nunca obterá um valor.

Além disso, você pode ver grep de saída do buffer porque não vai stdout .

Portanto, você precisa processar os dados ao vivo fazendo com que o pipeline seja alimentado diretamente em um loop de shell, semelhante a:

tail -f $logFile | grep --line-buffered ms | rev | cut -c 3- | rev | awk '{ if($NF > $monitorTreshold) {  print $0 }  }' | while read q
do
  echo "Query : $q"
done

Esteja avisado, em shells como bash , então as variáveis configuradas dentro desse loop não serão visíveis fora do loop. Em ksh93 , eles serão definidos. Se você precisar definir essas variáveis em bash , talvez seja necessário analisar os co-processos.

    
por 13.07.2016 / 20:59