精通测试技术,linux,shell,性能测试
全部博文(246)
分类: LINUX
2012-08-21 22:21:58
最近调试一个程序,debug的同时需要确定,系统日志第一次出现关键的时间,如果system很大,比如几百MB,脚本如果要反复用grep “关键字” system.log,计算的时间不准确,因此想到使用tail -f,但没想到,竟然匹配的关键字输出不到out文件,因此研究了一番
先看一下如下两个命令:
tail -f system.log | grep “thanks”
out中什么也没有, 好像被阻塞了一样, 后来查了原因往文件中写 ,跟往终端上输出是不一样的,往文件中写,是先写到pipe的缓冲区中,然后再往文件中写,用了 tail -f 之后表示一个流还没有完成, 缓冲区不会自动写, 所以out中一直没有内容。
正确的写法是 tail -f system.log | awk '/thanks/{print;fflush()}' >> out
这样就完美的写出了对一个流式的 awk 的处理 并将处理的结果保存到一个文件中。
经过试验,不仅在执行
“tail -f system.log | awk '/thanks/{print;fflush()}' >> out”