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 ...