从提取的 grep 结果中获取唯一性但使用流作为输入

从提取的 grep 结果中获取唯一性但使用流作为输入

当输入完成(比如一个文件)时,我们可以这样做:

cat file | grep -o memory=[3-9] | sort -u

sort不能与流一起使用:

tail -f server.log | grep -o memory=[3-9] | sort -u

server.log可以是无限流(实时日志)。上述命令可以持续数小时。

我怎样才能通过将另一个工具添加到管道中来汇总结果,或者以某种方式使其sort发挥作用?

或者:

除了在那里进行 grepping 之外,还有什么替代方案,grep但同时将参数传递到下一步 - 管道的下一个工具。我不确定管道是否允许这样做。

也许管道的第二部分必须是组合的(就像同时执行 grep + sort 一样)

我只对命令行方法感兴趣。

它可能类似于watch,但更新先前的结果。

例如:不要看到很多这样的行:

memory=4
memory=4
memory=4
memory=4
memory=2
...

我只想看到:

memory=4
memory=2

上面的输出是简化的,我想强调这种输出的聚合是我的主要问题。

答案1

可行的解决方案是:

$ tail -f infinite_server.log | grep -o memory=[3-9] > output &

然后

$ watch "cat output | sort -u"

相关内容