如何比较给定字符之前的文本

如何比较给定字符之前的文本

我正在处理如下所示的程序的输出:

[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,并将整行保存到数组中。每次遇到重复的结果时,它都会覆盖前一个条目。最后,只需打印数组中的所有行,现在数组中将只包含每个系统的最后结果。

相关内容