awk 中 对于tail f 的文件重定向

先看一下如下两个命令:

tail -f in | awk '{print  $0}'    

如果我们不断的往 in 中输入,结果是可以输出来的。 

第二条命令  

awk  ‘{print $0}’  in >> out

是可以把 in中的内容  打印到 out中的

第三条命令  把如下两个命令结合起来,就不好使了 

tail -f in | awk '{print  $0}' >> out        不好使

tail  in | awk '{print  $0}' >> out          好使

out中什么也没有, 好像被阻塞了一样, 后来查了原因 往文件中写  跟往终端上输出是不一样的,往文件中写,是先写到pipe的缓冲区中, 然后再往文件中写,用了 tail -f 之后表示一个流还没有完成, 缓冲区不会自动写, 所以out中一直没有内容。

正确的写法是  tail -f in | awk '{print  $0; fflush() }' >> out

这样就完美的写出了对一个流式的 awk 的处理 并将处理的结果保存到一个文件中。

猜你喜欢

转载自sharp-fcc.iteye.com/blog/1508614