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

在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:同时使用排序和Uniq命令

另一种计算文本文件中重复行数的方法是同时使用排序和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 '{ 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个重复的行。

结论

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Linux 基础