awk-fflush

awk如果检测到stdout不是直接输出到终端的话,会对输出做buffering,因此如果是周期性连续数据,而且需要把stdout重定向给另一个命令的stdin,那么需要fflush(stdout)

iostat 1 | awk '{print $1; fflush(stdout)}' | grep sda

不然awk的输出会被缓存住,grep会长时间收不到输入,从而导致终端很长一段时间都没有打印出东西。

同理,grep如果检测到stdout不是直接输出到终端的话,也会对输出做buffering,因此需要加上--line-buffered,让grep按行来buffer而不是按size来buffer,这样就可以保证每行都可以及时输出到下一个命令:

iostat 1 | grep --line-buffered sda | awk '{print $2,$3,$4}'

参考:

https://superuser.com/questions/379122/how-to-pipe-awk-output-with-periodic-continuous-input-to-output-file

https://superuser.com/questions/909686/grep-and-sed-with-pipe-from-tail-f-appears-to-be-caching

posted @ 2024-09-28 13:40  寻找繁星  阅读(8)  评论(0编辑  收藏  举报