IT技术博客大学习 共学习 共进步

grep awk 之buffer问题

PHPor 的Blog 2015-04-26 22:55:40 浏览 2,526 次

问题

   如下命令可以看到我们预期的输出:

while :; do echo abcd; sleep 1; done|grep abcd

   如下命令不能看到预期的输出: (不是立即看到,其实,只要等等她就会来)

while :; do echo abcd; sleep 1; done|grep abcd|grep abcd

   原因: 第一个grep命令buffer了输出

   解决办法: 添加 -line-buffered 选项

   同样, awk 也有类似问题,但是使用awk就没有添加选项这么幸运了;可以通过在awk的输出后面添加 system(“”); 来刷新buffer,如:

# while :; do echo abcd; sleep 1; done|awk '{print $0;system("");}'|awk '{print $0;}'

   参考资料: http://unix.stackexchange.com/questions/33650/why-does-awk-do-full-buffering-when-reading-from-a-pipe

建议继续学习

  1. Linux命令行里的“瑞士军刀” (阅读 11,443)
  2. AWK 简明教程 (阅读 9,143)
  3. Buffer和cache的区别是什么? (阅读 7,841)
  4. awk命令,实现文件的合并与拆分 (阅读 6,963)
  5. Linux grep命令用法 (阅读 6,963)
  6. AWK介绍 (阅读 6,581)
  7. grep 正则表达式选项要记得转义 (阅读 6,444)
  8. 更快的IP库查找方法以及AWK中的二分查找 (阅读 6,401)
  9. Linux操作系统中内存buffer和cache的区别 (阅读 6,341)
  10. awk 实例之二维数组 (阅读 5,923)