linuxuniq命令在文本文件中快速查找唯一或重复的行。在本指南中,我们将介绍它的多功能性和特性,以及如何充分利用这个漂亮的实用程序。
uniq命令是快速、灵活的,而且非常擅长它所做的事情。不过,与许多Linux命令一样,它也有一些怪癖,只要您了解这些怪癖就可以了。如果你在没有一点内幕知识的情况下铤而走险,结果很可能让你挠头。我们边走边指出这些怪癖。
uniq命令非常适合那些一心一意、一心只做一件事并把它做好的人。这就是为什么它也特别适合与管道一起工作,并在命令管道中发挥作用。它最频繁的合作者之一是sort,因为uniq必须对要处理的输入进行排序。
让我们点燃它!
相关:如何在Linux上使用管道
我们有一个文本文件,里面有罗伯特·约翰逊的歌《我相信我会打扫我的扫帚》的歌词。让我们看看uniq是怎么做的。
我们将键入以下内容以将输出导入更少的内容:
uniq dust-my-broom.txt | less我们得到整首歌,包括重复的台词,用更少的时间:
这似乎既不是唯一的行,也不是重复的行。
对,因为这是第一个怪癖。如果在没有选项的情况下运行uniq,它的行为就像使用了-u(unique line)选项一样。这告诉uniq只打印文件中唯一的行。之所以会看到重复行,是因为uniq要将行视为重复行,它必须与其重复行相邻,这就是sort的作用。
当我们对文件排序时,它将重复行分组,uniq将它们视为重复行。我们将对文件使用sort,将排序后的输出导入uniq,然后将最终输出导入less。
为此,我们键入以下内容:
sort dust-my-broom.txt | uniq | less排序后的行列表以较少的格式显示。
“我相信我会把扫帚掸干净”这句话,肯定不止一次出现在歌曲中。其实,这首歌的前四行里重复了两次。
那么,为什么它会出现在一系列独特的行中呢?因为一行第一次出现在文件中时是唯一的;只有后面的条目是重复的。您可以将其视为列出每个唯一行的第一个匹配项。
让我们再次使用sort并将输出重定向到一个新文件中。这样,我们就不必在每个命令中都使用sort。
我们键入以下命令:
sort dust-my-broom.txt > sorted.txt现在,我们有一个预排序的文件要处理。
可以使用-c(count)选项打印文件中每行出现的次数。
键入以下命令:
uniq -c sorted.txt | less每行以该行在文件中出现的次数开始。但是,您会注意到第一行是空的。这说明文件中有五行空行。
如果希望输出按数字顺序排序,可以将uniq的输出输入sort。在我们的示例中,我们将使用-r(reverse)和-n(numeric sort)选项,并将结果导入less。
我们键入以下内容:
uniq -c sorted.txt | sort -rn | less该列表根据每行出现的频率按降序排序。
如果只想看到文件中重复的行,可以使用-d(repeated)选项。无论一行在一个文件中复制多少次,它只列出一次。
要使用此选项,请键入以下内容:
uniq -d sorted.txt为我们列出了重复的行。您会注意到顶部的空白行,这意味着该文件包含重复的空白行,它不是UNIQ所留下的空间来美化列表。
我们还可以组合-d(重复)和-c(count)选项,并通过排序来管道输出。这给我们一个排序的列,其中至少出现两次。
键入以下内容以使用此选项:
uniq -d -c sorted.txt | sort -rn如果要查看每个重复行的列表,以及每次文件中出现一行时的条目,可以使用-D(所有重复行)选项。
要使用此选项,请键入以下内容:
uniq -D sorted.txt | less清单包含每个重复行的一个条目。
如果使用--group选项,则它会在每个组之前(prepend)或之后(append),或在每个组之前和之后(both)打印每个重复的行。
我们使用append作为修饰符,因此键入以下内容:
uniq --group=append sorted.txt | less各组之间用空行隔开,以便于阅读。
默认情况下,uniq检查每行的整个长度。但是,如果要将检查限制为一定数量的字符,可以使用-w(check chars)选项。
在本例中,我们将重复上一个命令,但将比较限制为前三个字符。为此,我们键入以下命令:
uniq -w 3 --group=append sorted.txt | less我们收到的结果和分组是完全不同的。
所有以“ib”开头的行都被分组在一起,因为这些行的那些部分是相同的,所以它们被认为是重复的。
同样,所有以“I'm”开头的行都被视为重复行,即使文本的其余部分不同。
在某些情况下,在每一行的开头跳过一定数量的字符可能是有益的,例如对文件中的行进行编号时。或者,假设您需要uniq跳过一个时间戳,并开始检查字符6中的行,而不是第一个字符中的行。
下面是一个带有编号行的已排序文件的版本。
如果希望uniq在字符3处开始比较检查,可以通过键入以下内容使用-s(跳过字符)选项:
uniq -s 3 -d -c numbered.txt行被检测为重复并正确计数。请注意,显示的行号是每个重复项第一次出现的行号。
您也可以跳过字段(一系列字符和一些空白)而不是字符。我们将使用-f(fields)选项来告诉uniq忽略哪些字段。
我们键入以下命令来告诉uniq忽略第一个字段:
uniq -f 1 -d -c numbered.txt当我们告诉uniq跳过每行开头的三个字符时,我们得到了相同的结果。
默认情况下,uniq区分大小写。如果同一个字母出现大写和小写,uniq认为行是不同的。
例如,检查以下命令的输出:
uniq -d -c sorted.txt | sort -rn“我相信我会掸掸我的扫帚”和“我相信我会掸掸我的扫帚”这两行不被视为重复,因为“相信”中“B”的大小写不同
如果我们包含-i(忽略大小写)选项,这些行将被视为重复。我们键入以下内容:
uniq -d -c -i sorted.txt | sort -rn现在,这些行被视为重复行并分组在一起。
Linux提供了许多特殊的实用程序供您使用。像他们中的许多人一样,uniq不是你每天都会用到的工具。
这就是为什么精通Linux的很大一部分是记住哪个工具可以解决当前的问题,以及在哪里可以再次找到它。不过,如果你练习的话,你会很顺利的。
或者,你可以随时搜索如何极客我们可能有一篇文章。
... 在您真正充分利用终端之前,您需要知道如何导航它。这就是为什么我们认为这些是最基本的Linux命令:如果你不能更改目录或者在一个你不记得如何使用的命令上获得帮助,那么再多的终端知识也帮不了你。 ...
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
...许您在Android设备上安装诚实善良的Linux应用程序。下面是如何使用Termux应用程序。 ...
... 如何在windows10上安装linux bash shell ...
要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...
想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...
使用Linux管道编排命令行实用程序如何协作。通过利用一组独立命令并将它们转化为一个专注的团队,简化复杂的流程并提高生产率。我们教你怎么做。 到处都是管道 管道是Linux和类Unix操作系统最有用的命令行特性之一。管道...
...,它没有排列,但不,这还不算全部。本教程将向您展示如何将其组合起来进行强大的操作。 当您在更复杂的命令序列中使用rev作为构建块时,它真正开始显示出它的价值。rev是一组作为促进者的命令(比如tac和yes)之一。当...