Выполнить команду stdout через команду sed или awk ПЕРЕД перенаправлением в файл? [dубликат]

функция awk '!seen[$0]++' печатает новые вхождения во входном канале.

Однако я не могу добавить канал после. Например:

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

Не выводит никакого выхода.

6
задан 28 September 2016 в 14:25

2 ответа

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 ...
7
ответ дан 18 July 2018 в 07:22

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 ...
7
ответ дан 24 July 2018 в 18:47

Другие вопросы по тегам:

Похожие вопросы: