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


引言

在 Linux 系统中,可能出于以下原因需要统计文本文件中重复行的数量:例如,您可能希望找出数据中是否存在任何错误,或者希望通过删除重复项来优化文件。无论出于何种原因,Linux 提供了多种可用于此目的工具和命令。

准备工作

在深入介绍这些命令之前,让我们先创建一个文本文件,其中包含一些重复行,我们可以使用这些重复行进行测试。打开一个终端,使用 touch 命令创建新文件:

$ touch "test.txt"

接下来,在您最喜欢的文本编辑器中打开该文件 (nano、vim 等),并添加以下行:

Hello
World
Hello
Linux
Linux

保存并关闭文件,但保持终端处于打开状态。

方法 1:使用 Uniq 命令

uniq 命令是一个实用工具,可以从文本文件中过滤掉重复的相邻行。它可以通过传递 “-c” 标志来统计重复行的数量,这将导致每行的前面加上它在输入中出现的次数。

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

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

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

方法 2:一起使用 Sort 和 Uniq 命令

计算文本文件中重复行的另一种方法是同时使用sortuniq命令。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命令

计算文本文件中重复行的另一种方法是同时使用grepwc命令。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”文件中查找这些行。

然后我们可以使用wc命令和“-l”标志计算行的数量 -。

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

正如你所看到的,输出显示“test.txt”文件中2行重复。

结论

在本文中,我们学习了如何使用uniq、sort、grepawk命令在Linux系统上计算文本文件中重复行的数量。这些方法各有优缺点,你可以选择最适合自己需求的方法。无论选择哪种方法,重要的是要记住这些命令只是Linux上可用于处理文本文件的众多工具中的几个。还有许多其他命令和实用工具可用于处理和分析文本数据,学习如何有效地使用它们可以极大地提高你作为Linux用户的生产力和效率。

更新于: 17-1-2023

14K+次查看

开启您的 职业

完成课程以获得认证

开始
广告