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

小心grep 的buffer

PHPor 的blog 2012-01-24 14:01:13 浏览 4,102 次
在统计mysql查询次数时,有如下命令:

 while :; do sleep 1;  mysql -u user -ppass -h phpor.net -P 3306 -e 'show status like "Questions";'; done |grep Ques | awk '{print $2 - old; old = $2; }'

几秒钟后都看不到结果,怀疑是awk的buffer造成的,于是改写为:
 while :; do sleep 1;  mysql -u user -ppass -h phpor.net -P 3306 -e  'show status like "Questions";'; done |grep Ques | awk  '{print $2 - old; old = $2; fflush();}'

依然不行,于是,把该命令推到后台,使用strace跟踪了一下awk,发现awk没有读到内容,很自然地,跟踪grep吧,发现grep read到内容了,但是总是不write,开始怀疑我的 Ques写错了,仔细比对,也没有问题呀,突然,屏幕上打印出了很多信息,于是,我恍然大悟,应该是grep的buffer搞的鬼,于是man了一下grep,果然有这方面的选项,再次修改如下:

 while :; do sleep 1;  mysql -u user -ppass -h phpor.net -P 3306 -e  'show status like "Questions";'; done |grep --line-buffered Ques | awk  '{print $2 - old; old = $2; fflush();}'

终于OK了

建议继续学习

  1. Buffer和cache的区别是什么? (阅读 7,840)
  2. Linux grep命令用法 (阅读 6,960)
  3. grep 正则表达式选项要记得转义 (阅读 6,442)
  4. Linux操作系统中内存buffer和cache的区别 (阅读 6,340)
  5. 学习Grep,Sed中的正则 (阅读 5,261)
  6. 快速预热Innodb Buffer Pool的方法 (阅读 4,980)
  7. MySQL数据库InnoDB存储引擎 Buffer pool LRU List Flush策略详解 (阅读 4,920)
  8. InnoDB之Dirty Page、Redo log (阅读 4,480)
  9. MySQL数据库InnoDB存储引擎 Insert Buffer实现机制详解 (阅读 4,380)
  10. grep: writing output: Broken pipe in iTerm2 (阅读 4,222)