получить awk для фильтрации бесконечных труб - PullRequest
0 голосов
/ 02 марта 2012

с помощью "cat / dev / tty0" я могу читать непрерывный поток вводимых символов.Некоторые входящие «телеграммы» ограничены символом новой строки.Нет, я хочу отфильтровать это по awk, но я не могу понять, как запустить awk, выполняя анализ.Кажется, он всегда ждет конца файла, я не вижу результата на stdout

Так что это работает, показывая мое первое слово каждой строки:

cat /dev/tty0 > myfile  (cancel somtime with Ctrl-C)
cat myfile | awk '{printf "%s\n",$1}' 

Но это не так, показничего:

cat /dev/tty0 | awk '{printf "%s\n",$1}'

есть идеи?Ахим

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Это может быть связано с буферизацией. Я не могу воспроизвести ваши результаты, но попробуйте это (stdbuf является частью coreutils):

stdbuf -i0 -o0 -e0 cat /dev/tty0 | awk '{printf "%s\n",$1}'

Или это (небуфер является частью ожидаемого):

unbuffer cat /dev/tty0 | awk '{printf "%s\n",$1}'

Или это:

awk '{printf "%s\n",$1}' < /dev/tty0
1 голос
/ 02 марта 2012

Вы можете попробовать использовать tail -f.

tail -f /dev/tty0 | awk '{printf "%s\n",$1}' 

tail и другие варианты, которые могут быть полезны, например --pid=nnn, который останавливает tail, когда данный процесс умирает.Большой -F может также работать, в зависимости от вашего вкуса.

...