无法绕过滚边和潜在的缓冲问题。我正在尝试执行一组管道操作,这些操作似乎在某些管道级别中断。为简化起见,我将其缩小为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
答案 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"
这用于获取文件的输出。