运维人员不仅要熟悉操作系统、服务器、网络等知识,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大家喜欢。
今天我们要讲的是 uniq 命令。
一、简介
uniq是英文unique(唯一)的缩写。uniq 命令的作用是删除文件中的重复行。 uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本(如果两端相同内容,但中间夹杂了其他文本行,则需要先使用sort命令进行排序后再去重)。
1.1. 基本语法
uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ -Fields ] [ +Characters ] [ InFile [ OutFile ] ]
参数说明:
参数 | 描述 |
-c | 显示每行在文本中重复出现的次数 |
-u | 仅显示没有重复的纪录 |
-d | 设置每个重复纪录只出现一次 |
-w | 仅对前N个字符进行比较 |
-D | 显示所有相邻的重复行 |
-z | 设置终止符(默认为换行符) |
-f | 跳过对前N个列的比较 |
-i | 忽略大小写 |
-s | 跳过对前N个字符的比较 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
二、示例说明
下面我们一起通过一个实例来更具体的理解一下 uniq 命令。
假设我们有一个文件 myfile.txt ,内容如下:
2.1. 不加参数
如果我们想要去除其中的重复行,只需在终端输入以下命令:
$ uniq myfile.txt
注意:uniq 不会检查重复的行,除非它们是相邻的行。这个例子中有重复行,但是都不是相邻的行,所以重复的行还是会存在。记住必须要用s ort 提前对文本进行排序。
$ sort myfile.txt |uniq
输出结果(重复行已删除):
2.2. -c 参数
如果我们想知道每个不同行出现的次数,可以使用-c参数。例如:
$ sort myfile.txt |uniq -c
输出结果:
2.3. -d 参数
如果我们只想保留重复出现的行(即去除不重复的行),可以使用-d参数。例如:
$ sort myfile.txt |uniq -d
输出结果:
2.4. -u 参数
如果我们只想保留不重复的行(即去除重复出现的行),可以使用-u参数。例如:
$ sort myfile.txt |uniq -u
输出结果: