![如何比较给定字符之前的文本](https://linux22.com/image/999061/%E5%A6%82%E4%BD%95%E6%AF%94%E8%BE%83%E7%BB%99%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B9%8B%E5%89%8D%E7%9A%84%E6%96%87%E6%9C%AC.png)
我正在处理如下所示的程序的输出:
[email protected]:randomtext1:completion of randomtext
[email protected]:randomtext4:completion of randomtext
[email protected]:randomtext3:completion of randomtext
[email protected]:randomtext2:completion of randomtext
[email protected]:randomtext5:completion of randomtext
[email protected]:randomtext6:completion of randomtext
[email protected]:randomtext7:completion of randomtext
[email protected]:randomtext8:completion of randomtext
因此,正如您所看到的,同一台计算机会给我多个结果,但每个结果的内容和长度都不同(但都在一行中)。有些计算机只会给出 1 个结果,而有些则会给出最多 15 个结果,具体取决于该计算机的活动。
我想要的是,我希望只看到每台计算机的一个结果,而不是所有结果。我现在所做的是对其进行排序并手动删除副本,这没什么用!我尝试使用以下命令差异和通信但没有运气(这是有道理的,因为线条非常不同)。
那么,如何才能通过终端将输出更改为类似于以下的输出:
[email protected]:randomtext1:completion of randomtext
[email protected]:randomtext4:completion of randomtext
[email protected]:randomtext2:completion of randomtext
我脑子里的想法是,也许有一种方法可以告诉终端“比较 .com 之前或第一个 : 之前的任何内容并删除副本”
答案1
如果任何结果都可以,请使用sort
并要求唯一的输出:
sort -ut: -k1,1 foo
选项:
-k 1,1
仅使用第一个字段进行排序-t:
用作:
字段分隔符-u
根据排序字段从输出中删除重复项
类似地,在 awk 中:
awk -F: '!a[$1]++' foo
在这两个命令中,使用:
作为字段分隔符,我们只查看第一个字段。
该awk
命令(我认为,该sort
命令也是如此)将只打印第一个结果。
得到最后的结果:
awk -F: '{a[$1] = $0} END {for (i in a) print a[i]}'
这里,我们使用第一个字段作为数组的索引a
,并将整行保存到数组中。每次遇到重复的结果时,它都会覆盖前一个条目。最后,只需打印数组中的所有行,现在数组中将只包含每个系统的最后结果。