'uniq' não é realtime quando canalizado

0

Quando eu corro

for i in {1..2000}; do sleep 0.1 && echo $(netstat -s | grep -i syns); done | uniq

eu posso ver em tempo real quando a expressão $(netstat -s | grep -i syns) muda.

Mas quando quero modificar a saída do pipe:

for i in {1..2000}; do sleep 0.1 && echo $(netstat -s | grep -i syns); done | uniq | while read line; do echo $(date) $line; done

o comportamento em tempo real é perdido. Como posso usar a saída de uniq para manipulações adicionais, em particular, anexar data a cada mudança de linha de entrada?

    
por danbst 14.07.2016 / 10:56

1 resposta

4

Talvez você só precise alterar o buffer:

# buffering totally off
stdbuf -i0 -o0 -e0 command

# buffering per line only
stdbuf -oL -eL command

Funciona para mim aqui ... seus resultados podem variar. Se isso não funcionar, tente colocá-lo antes de comandos diferentes (não enquanto estiver lendo, pois são componentes básicos).

for i in {1..2000}; do
    sleep 0.1 && echo $(netstat -s | grep -i syns)
done \
| stdbuf -oL -eL uniq | while read line; do
    echo $(date) $line
done
    
por 14.07.2016 / 11:29

Tags