функция awk '!seen[$0]++' печатает новые вхождения во входном канале.
Однако я не могу добавить канал после. Например:
my_function_with_ouput | awk '!seen[$0]++' | while read j
do
echo $j
done
Не выводит никакого выхода.
awk буферизует поток STDOUT, вам нужно очистить STDOUT, сделать его потоком, используя функцию fflush() для GNU awk:
my_function_with_ouput | awk '!seen[$0]++ {print; fflush()}' | while ...
Если вы не используете gawk, возьмите справку из stdbuf, небуферизованный STDOUT:
my_function_with_ouput | stdbuf -o0 awk '!seen[$0]++' | while ...
или сделайте буферизацию STDOUT:
my_function_with_ouput | stdbuf -oL awk '!seen[$0]++' | while ...
awk буферизует поток STDOUT, вам нужно очистить STDOUT, сделать его потоком, используя функцию fflush() для GNU awk:
my_function_with_ouput | awk '!seen[$0]++ {print; fflush()}' | while ...
Если вы не используете gawk, возьмите справку из stdbuf, небуферизованный STDOUT:
my_function_with_ouput | stdbuf -o0 awk '!seen[$0]++' | while ...
или сделайте буферизацию STDOUT:
my_function_with_ouput | stdbuf -oL awk '!seen[$0]++' | while ...