Как непрерывно отправлять вывод в файл из команды linux по каналу?

Команда ниже генерирует вывод каждую секунду в течение 60 секунд.

sar -n DEV  1 60 | grep lo

Если я перенаправляю его в файл, файл sar.log обновляется постоянно, т.е. каждую секунду

sar -n DEV  1 60 > sar.log &

Однако, как только он передается по конвейеру, а затем перенаправляется в файл, он заполняет файл sar.log только после его завершения, то есть через 60 секунд.

sar -n DEV 1 60 | grep lo > sar.log &

Как выполнить grep и перенаправить в файл, чтобы файл журнала постоянно обновлялся, т.е. каждую секунду

Я согласен с использованием чего-то другого, кроме grep, если это служит моей цели выбора чего-то и перенаправления в файл каждую секунду.


person user2250246    schedule 23.06.2017    source источник


Ответы (2)


С GNU grep: добавьте опцию --line-buffered, чтобы использовать буферизацию строк на выходе. Это может привести к снижению производительности.

person Cyrus    schedule 23.06.2017

Я обнаружил, что Как 'grep' непрерывный поток? также является хорошим отвечать.

sar -n DEV 1 10 | stdbuf -o0 grep lo > sar.log &
person user2250246    schedule 24.06.2017