小心grep 的buffer

在统计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了

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据