我试图通过观察每秒不断添加的数据来附加文件,并将数据传输到稍后将处理它的新文件。使用
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
之间的管道可能仍然有帮助。tail
awk