在 Linux 上统计文本文件中的重复行

linuxopen sourceoperating system更新于 2026/1/25 23:52:17

简介

在 Linux 系统上,您可能需要统计文本文件中重复行的数量,原因有很多。例如,您可能想找出数据中是否存在错误,或者想通过删除重复行来优化文件。无论出于何种原因,Linux 都提供了一些工具和命令来帮助您完成此操作。

准备工作

在深入研究命令之前,让我们先创建一个包含一些重复行的文本文件,用于测试。打开终端并使用 touch 命令创建一个新文件 -

$ touch "test.txt"

接下来,使用您常用的文本编辑器(nano、vim 等)打开该文件,并添加以下几行 -

Hello
World
Hello
Linux
Linux

保存并关闭文件,但保持终端打开。

方法 1:使用 Uniq 命令

uniq 命令是一个实用程序,用于从文本文件中过滤掉重复的相邻行。通过传递 "-c" 标志,可以使用 Itb 来计算重复行的数量,该标志会在每行前面加上它在输入中出现的次数。

要使用 uniq 计算 test.txt 文件中重复行的数量,我们可以使用以下命令 -

$ uniq -c test.txt
   2 Hello
   1 World
   2 Linux

如您所见,输出显示"Hello"行出现了两次,"World"行出现了一次,而"Linux"行出现了两次。

方法 2:同时使用 Sort 和 Uniq 命令

另一种统计文本文件中重复行数的方法是同时使用 sort 和 uniq 命令。sort 命令对文本文件中的行进行排序,而 uniq 命令则过滤掉重复的相邻行。要使用这些命令统计重复行数,我们可以先使用 sort 命令对"test.txt"文件中的行进行排序:

$ sort test.txt
Hello
Hello
Linux
Linux
World

然后,我们可以使用带有 "-c" 标志的 uniq 命令来统计重复行数 -

$ sort test.txt | uniq -c
   2 Hello
   2 Linux
   1 World

如您所见,输出显示"Hello"行出现了两次,"Linux"行出现了两次,"World"行出现了一次。

方法 3:使用 Awk 命令

awk 命令是处理文本文件的强大工具。它可以使用变量 NR(保存迄今为止已读取的记录(行)数)和显示数组(保存已在其中看到的行列表)来计算文本文件中重复行的数量。

要使用 awk 计算重复行的数量,我们可以使用以下命令 -

$ awk '{ if (seen[$0]++) { count++; } } END { print count }' test.txt
2

如您所见,输出显示"test.txt"文件中有 2 行重复。

方法 4:使用 Grep 和 wc 命令

另一种计算文本文件中重复行数的方法是结合使用 grep 和 wc 命令。grep 命令查找与特定模式匹配的行,而 wc 命令则计算文件中的行数、字数和字节数。要使用这些命令计算重复行数,我们可以先使用 grep 从"test.txt"文件中提取重复行 -

$ grep -w -f <(grep -w -o -e . test.txt | sort | uniq -d) test.txt
Hello
Linux

括号中的 grep 命令会查找唯一行(-u 标志),并仅显示匹配行的部分(-o 标志)。然后将输出传递给 sort 命令,对行进行排序,然后使用 uniq "-d" 命令过滤掉不重复的行。然后将得到的重复行列表传递给外部 grep 命令,该命令会在"test.txt"文件中查找这些行。

然后,我们可以使用带有 "-l" 标志的 wc 命令来统计行数 -

$ grep -w -f >(grep -w -o -e . test.txt | sort | uniq -d) test.txt | wc -l
2

如您所见,输出显示"test.txt"文件中有 2 行重复。

结论

在本文中,我们学习了如何在 Linux 系统上使用 uniq、sort、grep 和 awk 命令统计文本文件中的重复行数。每种方法都有其优点和局限性,您可以选择最适合您需求的方法。无论您选择哪种方法,请务必记住,这些命令只是 Linux 上众多可用于处理文本文件的工具中的一小部分。您还可以使用许多其他命令和实用程序来操作和分析文本数据,学习如何有效地使用它们可以极大地提高您作为 Linux 用户的生产力和效率。


相关文章


有用资源