sort | uniq和sort -u之间的区别
Contents
1. 概述
在本教程中,我们将快速比较 Linux 命令sort | uniq和 sort -u。两者都使用sort 从列表中删除重复条目, 但它们的操作方式略有不同。
请注意,以下所有命令均与平台无关。
2. 基本用法
让我们从名为color的文件中的颜色列表开始:
% cat color
Black
green
red
red
yellow
Green
red
如果我们想删除重复项,uniq 在某些情况下会起作用。检查uniq的手册页:
如果输入中的重复行不相邻,则不会检测到它们,因此可能需要先对文件进行排序。
对于我们的列表,结果不会是唯一条目的列表,因为我们的列表有重复的、不相邻的“红色”条目:
% uniq color
Black
green
red
yellow
Green
red
有几种方法可以解决这个问题。首先,将*-u*参数与 uniq一起使用会删除所有重复项,包括相邻的和不相邻的:
% uniq -u color
Black
green
yellow
Green
red
或者,采用手册页建议,在调用uniq之前对列表进行排序将删除所有重复项。
对列表进行排序很容易:
% sort color
Black
Green
green
red
red
red
yellow
将其通过管道传输到 uniq会产生:
% sort color | uniq
Black
Green
green
red
yellow
现在,查看sort的手册页,我们可以看到 -u标志将提供相同的输出:
% sort -u color
Black
Green
green
red
yellow
所以,一般来说,两者都sort | uniq和 sort -u做同样的事情。但也有一些不同。
例如,sort 有其他选项,如按分隔符排序。但是我们可以使用这些,而不管使用*-u* 或管道到 uniq。
3. 计算唯一条目
在找到唯一项列表后,很多时候我们还想知道唯一项的数量。uniq的 -c选项将返回每个重复行的计数:
% uniq -c color
1 Black
1 green
2 red
1 yellow
1 Green
1 red
有点用处,但它再次遇到了忽略不相邻重复项的问题。为了避免这种情况,我们可以先对列表进行排序,然后将输出通过管道传递给uniq:
sort color | uniq -c
1 Black
1 Green
1 green
3 red
1 yellow
现在我们有一个唯一条目的列表,与邻接无关。
更进一步,假设我们想要对列表中的唯一项目进行计数。我们可以通过管道连接到wc :
% sort color | uniq | wc -l
5
或者使用sort -u而不是 uniq:
% sort -u color | wc -l
5
我们得到了我们独特的列表项的数量。