Linux去除重复项命令uniq
本篇介绍uniq命令,uniq也是linux管道命令家族中的一员,其主要功能是去除重复项。
在介绍uniq命令之前,我们先来新建在下面的案例中需要用到的文件/tmp/uniq.txt,内容如下
$ cat /tmp/uniq.txt
alpha css web
cat linux command
error php function
hello world
onmpw web site
onmpw web site
wello web site
recruise page site
error php function
repeat no data
onmpw web site
好,现在我们小试牛刀一次
$ uniq /tmp/uniq.txt
alpha css web
cat linux command
error php function
hello world
onmpw web site
wello web site
recruise page site
error php function
repeat no data
onmpw web site
哎呀,我们发现结果好像有些不正常啊。在源文件中“error php function” 有两条,“onmpw web site” 有三行,而结果中“error php function”没有去重,“onmpw web site”只去重了一条。
这里需要说明一下,默认情况下uniq只会检索相邻的重复数据从而去重。在/tmp/uniq.txt中虽然“onmpw web site” 有三条,但是其中一条是和其他两条不相邻的,所以只去重了一条,同理“error php function”也是这种情况。
鉴于以上的检索机制,所以uniq一般情况下要和sort命令一块儿使用。
$ sort /tmp/uniq.txt | uniq
alpha css web
cat linux command
error php function
hello world
onmpw web site
recruise page site
repeat no data
wello web site
现在再看是不是所有的重复项都已经经过去重处理了。
好了,小试牛刀一把以后,下面我们开始对uniq命令的选项进行简单的介绍。
-c 统计每一行数据的重复次数
$ sort /tmp/uniq.txt | uniq -c
1 alpha css web
1 cat linux command
2 error php function
1 hello world
3 onmpw web site
1 recruise page site
1 repeat no data
1 wello web site
我们看 “error php function”出现了两次,“onmpw web site”出现了三次。其余的都没有重复项所以为1。
-i 忽略大小写
在/tmp/uniq.txt中添加一行数据 “Error PHP function”
$ cat /tmp/uniq.txt
alpha css web
cat linux command
error php function
hello world
onmpw web site
onmpw web site
wello web site
Error PHP function
recruise page site
error php function
repeat no data
onmpw web site
$ sort /tmp/uniq.txt | uniq –c
1 alpha css web
1 cat linux command
2 error php function
1 Error PHP function
1 hello world
3 onmpw web site
1 recruise page site
1 repeat no data
1 wello web site
我们看结果,uniq默认是区分大小写的。使用-i可以忽略掉大小写问题
$ sort /tmp/uniq.txt | uniq –c –i
1 alpha css web
1 cat linux command
3 error php function
1 hello world
3 onmpw web site
1 recruise page site
1 repeat no data
1 wello web site
现在再看是不是大小写已经忽略掉了。
-u 只输出没有重复的数据
$ sort /tmp/sort.txt | uniq –iu
alpha css web
cat linux command
hello world
recruise page site
repeat no data
wello web site
看到没,结果中的“error php function”和“onmpw web site”都没有被输出。
-w N 表示从第一个字符开始只检索N个字符来判重。
$ sort /tmp/sort.txt | uniq –icw 2
1 alpha css web
1 cat linux command
3 error php function
1 hello world
3 onmpw web site
2 recruise page site
1 wello web site
结果中我们看到,“recruise page site”也被统计为2,但是在源文件中它只有一行。而且我们还发现“repeat no data”消失了。这都是-w 2 的作用,这里我们让uniq只对前两个字符进行检索,recruit 和 repeat前两个字符都是re,所以这两行也被认为是重复的。
-f N 表示略过前面N个字段,从第N+1个字段开始检索重复数据。以空格符或者tab键为分隔符。
$ sort /tmp/sort.txt | uniq –icf 2
1 alpha css web
1 cat linux command
3 error php function
1 hello world
4 onmpw web site
1 repeat no data
1 wello web site
我们在结果中可以看到,这是略过前面的2个字段,从第三个字段开始判重的。“recruise page site” 和 “onmpw web site”的第三个字段相同,所以被认为是相同的数据。但是我们看到,“wello web site”和“onmpw web site”不但第三个字段相同,第二个也相同。那为什么它不被计入“onmpw web site”的重复数据中呢。对于这个问题就要回到前面说的,uniq只检测相邻的数据是否是重复的。
要解决这个问题还需要在sort命令上着手。还记得sort命令的-k选项吗,没错,我们就用它来解决。
$ sort –k 2 /tmp/uniq.txt | uniq –icf 2
1 alpha css web
1 cat linux command
1 repeat no data
1 recruise page site
3 error php function
4 onmpw web site
1 hello world
我们看,是不是解决了。
-s N表示略过前面N个字符,关于这个选项的例子我们这里就不再举了,该选项和-f N的用法差不多。只不过-f N是略过前面N个字段;-s是略过前面N个字符。
-d 只输出有重复项的第一条的数据。
$ sort /tmp/uniq.txt | uniq -idw 2
repeat no data
error php function
onmpw web site
结果只有这三条。为什么会有“repeat no data”这条数据,这里注意-w 2的应用。
-D 对于重复项全部输出
$ sort /tmp/uniq.txt | uniq –iDw 2
repeat no data
recruise page site
error php function
error php function
Error PHP function
onmpw web site
onmpw web site
onmpw web site
好了,关于uniq的选项的所有常用的命令已经都介绍完了。关于uniq更详细的信息可以使用命令info uniq。
希望本文对大家有所帮助。
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数