尾巴-f通过管道传输到> awk管道传输文件>文件不起作用

时间:2014-11-11 16:59:53

标签: linux bash awk tail output-buffering

无法绕过滚边和潜在的缓冲问题。我正在尝试执行一组管道操作,这些操作似乎在某些管道级别中断。为简化起见,我将其缩小为3个无法正常工作的管道操作

tail -f | awk '{print $1}' > file

导致没有数据重定向到文件,但是

tail -f | awk '{print $1}'

结果输出到stdout fine

tail -10 | awk '{print $1}' > file

也可以。

认为这可能是缓冲问题,试过

tail -f | unbuffer awk '{print $1}' > file

什么没有产生积极的结果

(注意:在原始请求中,我使用grep --line-buffer之间有更多操作,但问题被缩小为3个管道命令tail -f | awk > file

2 个答案:

答案 0 :(得分:0)

以下将tail -f在给定文件上以及每当添加新数据时将自动执行while循环:

tail -f file_to_watch | while read a; do echo "$a" |awk '{print $1}' >> file;  done

或者更简单地说,如果你真的只需要打印第一个字段就可以直接读到你的变量:

tail -f file_to_watch | while read a b; do echo "$a" >> file;  done

答案 1 :(得分:0)

以下是处理日志文件的方法:

tail --follow=name logfile | awk '{print $1 | "tee /var/log/file"}' 

或者对你来说这可能没问题:

tail -f | awk '{print $1 | "tee /var/log/file"}'

--follow=name这可以防止日志文件滚动时停止命令 | "tee /var/log/file"这用于获取文件的输出。