侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux uniq命令用法详解:如何检查和删除文本文件中的重复行(附实例和选项)

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选项。
0

评论区