Não é possível usar saída de pipe awk

6

a função awk '!seen[$0]++' imprime as novas ocorrências em um pipe de entrada.

No entanto, não consigo adicionar um pipe depois. Por exemplo,

my_function_with_ouput | awk '!seen[$0]++' | while read j
do
echo $j
done

Não produz saída.

    
por user123456 28.09.2016 / 13:06

1 resposta

7

awk armazena em buffer o fluxo STDOUT, você precisa liberar o STDOUT, liberá-lo usando a função fflush() do GNU awk :

my_function_with_ouput | awk '!seen[$0]++ {print; fflush()}' | while ...

Se você não tiver gawk , obtenha ajuda de stdbuf , STDOUT sem buffer:

my_function_with_ouput | stdbuf -o0 awk '!seen[$0]++' | while ...

ou faça a linha STDOUT em buffer:

my_function_with_ouput | stdbuf -oL awk '!seen[$0]++' | while ...
    
por heemayl 28.09.2016 / 13:24