linux uniq命令

时间:2020-03-21 11:48:32  来源:igfitidea点击:

如果我们主要在命令行上工作并且每天处理大量文本文件,则应注意Uniq命令。
此命令可轻松地从文件中查找重复/重复的行。
它不仅用于查找重复项,而且还用于删除重复项,显示重复行的出现次数,仅显示重复行和仅显示唯一行等。
由于uniq命令是GNU coreutils软件包的一部分,因此它预先安装在大多数Linux发行版中。
因此,让我们不要理会安装,而是看一些实际的例子。

请注意,“ uniq”命令将不会检测重复的行,除非它们相邻。
因此,我们可能需要先对其进行排序,或者将sort命令与uniq结合使用以获取结果。
请允许我向我们展示一些示例。

首先,让我们创建一个包含一些重复行的文件。

$vi theitroad.txt
welcome to theitroad
welcome to theitroad
Linus is the creator of Linux.
Linux is secure by default
Linus is the creator of Linux.
Top 500 super computers are powered by Linux

如我们在上面的文件中看到的,我们几乎没有重复的行(第一,第二,第三和第五行是重复的)。

1.使用Uniq命令删除文件中的连续重复行

如果使用不带任何参数的'uniq'命令,它将删除所有连续的重复行并仅显示唯一行。

$uniq theitroad.txt

如我们所见,uniq命令删除了给定文件中所有连续的重复行。
我们可能还已经注意到,上面的输出在第二行和第四行中仍然有重复项。
这是因为uniq命令仅在重复的行相邻时才将其省略。
当然,我们也可以删除那些非连续的重复项。
看下面的第二个例子。

2.删除所有重复的行

$sort theitroad.txt | uniq

看到了吗?
没有重复的行。
换句话说,以上命令将从文件theitroad.txt中显示每行一次。
我们将sort命令与uniq一起使用,因为,正如我已经提到的,除非uniq相邻,否则uniq不会找到重复/重复的行。

3.仅显示文件中的唯一行

要仅显示文件中的唯一行,命令将为:

$sort theitroad.txt | uniq -u

输出示例:

Linux is secure by default
Top 500 super computers are powered by Linux

如我们所见,给定文件中只有两个唯一的行。

4.仅显示重复的行

同样,我们也可以显示如下文件中的重复行。

$sort theitroad.txt | uniq -d

输出示例:

Linus is the creator of Linux.
welcome to theitroad

这两行是theitroad.txt文件中的重复/重复行。
请注意,-d(小d)将仅打印重复的行,每组一行。
要打印所有重复的行,请使用-D(大写字母d),如下所示。

$sort theitroad.txt | uniq -D

在下面的 Screen截图中查看两个标志之间的区别。

5.显示文件中每一行的出现次数

由于某些原因,我们可能要检查给定文件中一行重复的次数。
为此,请使用-c标志,如下所示。

$sort theitroad.txt | uniq -c

输出示例:

2 Linus is the creator of Linux.
 1 Linux is secure by default
 1 Top 500 super computers are powered by Linux
 2 welcome to theitroad

我们还可以显示每行的出现次数以及该行的出现次数,并使用最常见的命令将其排序:

$sort theitroad.txt | uniq -c | sort -nr

输出示例:

2 welcome to theitroad
 2 Linus is the creator of Linux.
 1 Top 500 super computers are powered by Linux
 1 Linux is secure by default

6.将比较限制为“ N”个字符

Uniq命令允许我们使用-w标志将比较限制为文件中特定数量的行字符。
例如,让我们将比较限制为文件中各行的前4个字符,并显示重复的行,如下所示。

$uniq -d -w 4 theitroad.txt

7.避免与前N个字符进行比较

就像限制比较文件中N行的字符一样,我们也可以避免使用-s标志比较前N个字符。

以下命令将避免与文件中各行的前4个字符进行比较:

$uniq -d -s 4 theitroad.txt

为了避免比较前N个字段而不是字符,请在上述命令中使用'-f'标志。

有关更多详细信息,请参见帮助部分。

$uniq --help

或者手册页。

$man uniq