如何使用 uniq 查找 Linux 文本文件中的重复数据如何使用 uniq 查找 Linux 文本文件中的重复数据如何使用 uniq 查找 Linux 文本文件中的重复数据如何使用 uniq 查找 Linux 文本文件中的重复数据
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 uniq 查找 Linux 文本文件中的重复数据

如果您有一个文本文件,其中包含要删除的重复内容,那么是时候学习如何使用 uniq 命令了。

您是否遇到过包含重复行和重复单词的文本文件?也许您经常使用命令输出并希望过滤这些输出以获取不同的字符串。当涉及到 Linux 中的文本文件和删除冗余数据时,uniq 命令是您的最佳选择。

在本文中,我们将深入讨论 uniq 命令,并详细介绍如何使用该命令从文本文件中删除重复行。

uniq 命令是什么?

Linux 中的 uniq 命令用于显示文本文件中的相同行。如果您想从文本文件中删除重复的单词或字符串,此命令会很有帮助。由于 uniq 命令匹配相邻行来查找冗余副本,因此它仅适用于排序的文本文件。

幸运的是,您可以将 sort 命令与 uniq 进行管道传输,以与该命令兼容的方式组织文本文件。除了显示重复行之外,uniq 命令还可以统计文本文件中重复行的出现次数。

如何使用 uniq 命令

有多种选项和标志可以与 uniq 一起使用。其中一些是基本的,执行简单的操作,例如打印重复的行,而另一些则适合经常在 Linux 上使用文本文件的高级用户。

基本语法

uniq 命令的基本语法是:

uniq option input output

...其中选项是用于调用命令的特定方法的标志,输入是要处理的文本文件,输出是将存储输出的文件的路径。

output 参数是可选的,可以跳过。如果用户未指定输入文件,uniq 将从标准输出中获取数据作为输入。这允许用户将 uniq 与其他 Linux 命令进行管道传输。

示例文本文件

我们将使用文本文件 duplicate.txt 作为命令的输入。

127.0.0.1 TCP
127.0.0.1 UDP
Do catch this
DO CATCH THIS
Don't match this
Don't catch this
This is a text file.
This is a text file.
THIS IS A TEXT FILE.
Unique lines are really rare.

请注意,我们已经使用 sort 命令对此文本文件进行了排序。如果您正在使用其他文本文件,可以使用以下命令对其进行排序:

sort filename.txt > sorted.txt

删除重复行

uniq 最基本的用途是从输入中删除重复的字符串并打印唯一的输出。

uniq duplicate.txt

输出 :

请注意,系统不会显示第二次出现的行这是一个文本文件。此外,上述命令仅打印文件中的唯一行,不会影响原始文本文件的内容。

计算重复行数

要输出文本文件中的重复行数,请在默认命令中使用 -c 标志。

uniq -c duplicate.txt

输出 :

系统显示文本文件中存在的每一行的计数。您可以看到行这是一个文本文件在文件中出现了两次。缺省情况下,uniq 命令区分大小写。

仅打印重复行

要仅打印文本文件中的重复行,请使用 -D 标志。 -D 代表重复。

uniq -D duplicate.txt

系统将显示如下输出。

This is a text file.
This is a text file.

检查重复项时跳过字段

如果您想在匹配字符串时跳过一定数量的字段,可以在命令中使用 -f 标志。 -f 代表字段。

考虑以下文本文件fields.txt。

192.168.0.1 TCP
127.0.0.1 TCP
354.231.1.1 TCP
Linux FS
Windows FS
macOS FS

要跳过第一个字段:

uniq -f 1 fields.txt

输出 :

192.168.0.1 TCP
Linux FS

上述命令跳过第一个字段(IP 地址和操作系统名称)并匹配第二个单词(TCP 和 FS)。然后,它将每个匹配项的第一次出现显示为输出。

比较时忽略字符

与跳过字段一样,您也可以跳过字符。 -s 标志允许您指定在匹配重复行时要跳过的字符数。当您使用的数据采用列表形式时,此功能会有所帮助,如下所示:

1. First
2. Second
3. Second
4. Second
5. Third
6. Third
7. Fourth
8. Fifth

要忽略文件 list.txt 中的前两个字符(列表编号):

uniq -s 2 list.txt

输出 :

在上面的输出中,前两个字符被忽略,其余字符与唯一行匹配。

检查前 N 个字符是否重复

-w 标志允许您仅检查固定数量的字符是否重复。例如:

uniq -w 2 duplicate.txt

上述命令将仅匹配前两个字符,并打印唯一的行(如果有)。

输出 :

删除区分大小写

如上所述,uniq 在匹配文件中的行时区分大小写。要忽略字符大小写,请在命令中使用 -i 选项。

uniq -i duplicate.txt

您将看到以下输出。

请注意,在上面的输出中,uniq 没有显示行 DO CATCH THIS 和 THIS IS A TEXT FILE。

将输出发送到文件

要将 uniq 命令的输出发送到文件,可以使用输出重定向 (>) 字符,如下所示:

uniq -i duplicate.txt > otherfile.txt

将输出发送到文本文件时,系统不显示命令的输出。您可以使用cat命令检查新文件的内容。

cat otherfile.txt

您还可以使用其他方法将命令行输出发送到 Linux 中的文件。

使用 uniq 分析重复数据

大多数时候,在管理 Linux 服务器时,您要么在终端上工作,要么编辑文本文件。因此,了解如何删除文本文件中多余的行副本对于您的 Linux 技能来说是一笔巨大的财富。

如果您不知道如何对文件中的文本进行过滤和排序,那么使用文本文件可能会令人沮丧。为了使您的工作更轻松,Linux 提供了多个文本编辑命令,例如 sed 和 awk,使您可以高效地处理文本文件和命令行输出。

©2015-2025 艾丽卡 support@alaica.com