如何在连续的管道中找到新发现的管线?

如何在连续的管道中找到新发现的管线?

mycmd假设您有一个在管道中发送连续流的命令。

您只想打印每个新出现的内容。

你会怎么做?

命令

mycmd | sort -u

是无效的,因为我必须等到 mycmd 完成。

显然可以使用文件,但我确信可能存在更直接的方法。

答案1

sort不会显示任何内容,因为sort无法处理没有 EOF(文件结束)的 STDIN 数据流。

sortmycmd仅当在某个点结束时才会起作用,然后sort会看到 EOF,并处理内容。


要获取数据流上的唯一内容,可以使用awk数组来存储记录数:

mycmd | awk '!seen[$0]++'

seen[$0]通过获取行的值来检查行是否在数组中seen。如果行不存在,seen[$0]则返回0(false),然后否定 ( !) 测试变为真,并打印行(默认操作)。++将值增加 1,因此下次对于任何重复的行,否定测试都将为假。

相关内容