Linux uniq命令介绍
uniq是一个英文单词,意思是unique,即独特的、唯一的。uniq命令的作用是从已排序的文本文件中报告或过滤掉重复的行。它可以用来统计每行在文件中出现的次数、列出只出现一次或多次的行、忽略或比较指定的字符或字段等。uniq命令通常与sort命令结合使用,因为uniq命令要求输入文件是按照字典顺序排序的。
适用的Linux版本
uniq命令是GNU coreutils软件包的一部分,它在大多数Linux发行版中都是默认安装的。你可以使用以下命令来检查你的系统是否安装了uniq命令:
[linux@bashcommandnotfound.cn ~]$ which uniq
如果你看到类似于/usr/bin/uniq
的输出,说明你已经安装了uniq命令。如果没有输出,说明你需要安装uniq命令。不同的Linux发行版有不同的安装方法,以下是一些常见的例子:
CentOS 7
在CentOS 7中,你可以使用yum命令来安装coreutils软件包:
[linux@bashcommandnotfound.cn ~]$ sudo yum install coreutils
CentOS 8
在CentOS 8中,你可以使用dnf命令来安装coreutils软件包:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install coreutils
Ubuntu
在Ubuntu中,你可以使用apt命令来安装coreutils软件包:
[linux@bashcommandnotfound.cn ~]$ sudo apt install coreutils
Linux uniq命令的基本语法
uniq命令的基本语法如下:
uniq [options] [input_file] [output_file]
其中,options是可选的参数,用来指定一些选项;input_file是要处理的已排序的文本文件,如果没有指定,则从标准输入读取数据;output_file是要输出的文本文件,如果没有指定,则输出到标准输出设备(显示终端)。
Linux uniq命令的常用选项说明
uniq命令支持以下常用选项:
选项 | 描述 |
---|---|
-c 或 --count | 在每行旁边显示该行在文件中出现的次数 |
-d 或 --repeated | 只显示重复出现的行 |
-u 或 --unique | 只显示只出现一次的行 |
-i 或 --ignore-case | 忽略大小写差异 |
-f num 或 --skip-fields=num | 忽略比较前num个字段 |
-s num 或 --skip-chars=num | 忽略比较前num个字符 |
-w num 或 --check-chars=num | 只比较每行前num个字符 |
Linux uniq命令的实例
统计各行在文件中出现的次数
我们有一个文本文件test.txt,它包含以下内容:
[linux@bashcommandnotfound.cn ~]$ cat test.txt
apple
banana
orange
apple
pear
banana
apple
orange
我们可以使用sort和uniq命令来统计各行在文件中出现的次数,并使用-c选项来显示计数:
[linux@bashcommandnotfound.cn ~]$ sort test.txt | uniq -c
3 apple
2 banana
2 orange
1 pear
只显示重复出现的行
我们可以使用-d选项来只显示重复出现的行,不显示只出现一次的行:
[linux@bashcommandnotfound.cn ~]$ sort test.txt | uniq -d
apple
banana
orange
只显示只出现一次的行
我们可以使用-u选项来只显示只出现一次的行,不显示重复出现的行:
[linux@bashcommandnotfound.cn ~]$ sort test.txt | uniq -u
pear
忽略大小写差异
我们有一个文本文件test2.txt,它包含以下内容:
[linux@bashcommandnotfound.cn ~]$ cat test2.txt
Apple
apple
Banana
banana
Orange
orange
Pear
pear
我们可以使用-i选项来忽略大小写差异,将大写和小写视为相同:
[linux@bashcommandnotfound.cn ~]$ sort test2.txt | uniq -i -c
2 Apple
2 Banana
2 Orange
2 Pear
忽略比较前num个字段或字符
我们有一个文本文件test3.txt,它包含以下内容:
[linux@bashcommandnotfound.cn ~]$ cat test3.txt
1 apple red
2 banana yellow
3 orange orange
4 apple green
5 pear yellow
6 banana green
7 apple yellow
8 orange green
我们可以使用-f num选项来忽略比较前num个字段,以空格为字段分隔符。例如,如果我们想忽略第一个字段,只比较水果的名称,我们可以使用-f 1选项:
[linux@bashcommandnotfound.cn ~]$ sort test3.txt | uniq -f 1 -c
3 1 apple red
2 2 banana yellow
2 3 orange orange
1 5 pear yellow
我们也可以使用-s num选项来忽略比较前num个字符。例如,如果我们想忽略前两个字符,只比较水果的颜色,我们可以使用-s 2选项:
[linux@bashcommandnotfound.cn ~]$ sort test3.txt | uniq -s 2 -c
1 1 apple red
3 2 banana yellow
1 3 orange orange
1 4 apple green
1 6 banana green
1 8 orange green
只比较每行前num个字符
我们有一个文本文件test4.txt,它包含以下内容:
[linux@bashcommandnotfound.cn ~]$ cat test4.txt
apple pie
apple juice
banana bread
banana split
orange juice
orange peel
pear jam
pear cake
我们可以使用-w num选项来只比较每行前num个字符。例如,如果我们想只比较水果的名称,不比较后面的食物,我们可以使用-w 5选项:
[linux@bashcommandnotfound.cn ~]$ sort test4.txt | uniq -w 5 -c
2 apple pie
2 banana bread
2 orange juice
2 pear jam
Linux uniq命令的注意事项
- uniq命令要求输入文件是已排序的,否则它不能正确地检测重复的行。因此,通常需要先使用sort命令对文件进行排序,然后再使用uniq命令进行处理。
- uniq命令只能检测相邻的重复行,如果重复行不相邻,它会被视为唯一的行。因此,在使用uniq命令之前,最好先对文件进行排序,以便将重复行放在一起。
- uniq命令默认区分大小写,如果想忽略大小写差异,需要使用-i选项。
评论区