先看一下如下两个命令:
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 的处理 并将处理的结果保存到一个文件中。