Linux【2】-管理文件-4-uniq

如果我排序完成了,想要将重复的资料仅列出一个显示,可以怎么做呢?

[root@www ~]# uniq [-ic]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数

范例一:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位;

[root@www ~]# last | cut -d ' ' -f1 | sort | uniq

范例二:承上题,如果我还想要知道每个人的登入总次数呢?

[root@www ~]# last | cut -d ' ' -f1 | sort | uniq -c
1
12 reboot
41 root
1 wtmp
# 从上面的结果可以发现 reboot 有 12 次, root 登入则有 41 次!
# wtmp 与第一行的空白都是 last 的默认字符,那两个可以忽略的!

这个指令用来将『重复的行删除掉只显示一个』,举个例子来说, 你要知道这个月份登入你主机的用户有谁,而不在乎他的登入次数,那么就使用上面的范例, (1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)只显示一个! 由于这个指令是在将重复的东西减少,所以当然需要『配合排序过的档案』来处理啰!

1. 取出两个文件的并集(重复的行只保留一份)
2. 取出两个文件的交集(只留下同时存在于两个文件中的文件)
3. 删除交集,留下其他的行
1. cat file1 file2 | sort | uniq > file3
2. cat file1 file2 | sort | uniq -d > file3
3. cat file1 file2 | sort | uniq -u > file3

三、讨论

2.1 两个文件的交集,并集

前提条件:每个文件中不得有重复行

  1. 取出两个文件的并集(重复的行只保留一份)

    cat file1 file2 | sort | uniq > file3

  2. 取出两个文件的交集(只留下同时存在于两个文件中的文件)

    cat file1 file2 | sort | uniq -d > file3

  3. 删除交集,留下其他的行

    cat file1 file2 | sort | uniq -u > file3

2.3 一个文件去掉重复的行:

sort file |uniq

注意:重复的多行记为一行,也就是说这些重复的行还在,只是全部省略为一行!

sort file |uniq -u

上面的命令可以把重复的行全部去掉,也就是文件中的非重复行!

具体细节可以查看,cat,sort,uniq等命令的详细介绍

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学