尾部更换文件

尾部更换文件

我试图通过观察每秒不断添加的数据来附加文件,并将数据传输到稍后将处理它的新文件。使用

tail -f 'data file' >> 'destination file'

但有些行是重复的,所以我这样做。

tail -f 'data file' | awk '!seen[$0]++' | >> 'destination file'

这看起来不错,但是该行会被分割一段时间,所以我想我需要缓冲整行才能实现这一点。但这是一个好方法还是我应该以另一种方式做呢?

tail -f 'data file' | grep --line-buffered -E '^.*$' | awk '!seen[$0++]'

完整数据示例

[9/10/17 14:21:09] Data=[xxx|yyy|zzz] 

分割示例

[9/1
[9/10/17 14:21:09] Data=[xx 

像这样的东西。在我将数据从 传输到 后,会发生这种tail情况awk。所以我转到grep命令末尾,它就工作了。但如果数据太小,数据将保留在缓冲区中。

tail -f 'data file' | awk '!seen[$0++]' | grep --line-buffered -E '^.*$'

感谢您的建议和回答!

答案1

但有些行是重复的

如果重复项是相邻行,您可以尝试uniq

$ tail -f <file> | uniq

在快速测试中,这按预期工作,在写入输出之前等待完整的行。

如果重复的行分散在文件中,添加到和uniq之间的管道可能仍然有帮助。tailawk

相关内容