uniq
前言
-
很多时候我们需要对数据去重,不管是少量数据还是大量数据,写代码进行去重终究没有使用系统功能直接操作文件方便,所以本文就介绍了一些关于uniq的使用方法
-
uniq单独使用
-
uniq配合sort实现文件去重
-
uniq配合sort实现文件之间的交集,并集,和差集
uniq单独使用
用法 :uniq [选项]… [文件]
注意
-
uniq去重时需要重复数据是相邻的,也就是说需要配合sort排序后去重,不相邻的重复数据是无法用uniq去重的
-
uniq去重后输出结果是直接输出到终端的,不对源文件进行去重删除,所以如果是对文件去重需要将用>将去重后的数据输入到新的文件中。
参数详解
-
c, --count 会显示该条重复数据重复了几次,数字在重复数据前
-
d, --repeated 只输出重复的行(配合-c使用)
-
D, --all-repeated 只输出重复的行,不过有几行输出几行,类似于吧重复的数据都拿出来然后排列后展示(这个就没法配合-c使用了)
-
f, --skip-fields=N 以行为方向,忽略该行的N个字符,与下一行比较,同时下面的行也是忽略该行的N个字符的
-
i, --ignore-case //不区分大小写
-
s, --skip-chars=N //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符
-
u, --unique //去除重复的后,全部显示出来,根mysql的distinct功能上有点像
-
z, --zero-terminated end lines with 0 byte, not newline
-
w, --check-chars=N //对每行第N 个字符以后的内容不作对照
-
借用参考资料中的例子数据
"""
this is a test
this is a test
i am tank
i love tank
i love tank
this is a test
whom have a try
WhoM have a try
you have a try
i want to abroad
those are good men
we are good men
"""
当直接使用时
-
1 直接输出到命令窗口
-
2 不相邻的重复数据是不会去重的,所以要搭配sort使用
搭配参数 -c
- 此时只是统计了数据出现次数
搭配参数 -d
搭配参数 -d -c
搭配参数 -D
搭配参数 -f
搭配参数 -i / -u
-s / -w
- -sb与-w都有-f比较容易理解,都是忽略部分字符去重不再试验
uniq配合sort实现文件去重
-
相信上面其中的一个例子,使用uniq与sort搭配去重已经可以让人举一反三,所以此处不多赘述
-
关于sort的参数详情可以参考本人另一个博客,搜索sort的用法(简写,不是特别详细,不要有很高的期望,毕竟sort直接用不加参数的时候最多,搭配uniq使用,重点也不是sort)
uniq配合sort实现文件之间的交集,并集,和差集
- 如果上面两个方法已经掌握,该方法就是花活儿了,同上依旧略写
交集
sort a.txt b.txt | uniq -d
并集
sort a.txt b.txt | uniq
差集
a.txt-b.txt:
sort a.txt b.txt b.txt | uniq -u
b.txt - a.txt:
sort b.txt a.txt a.txt | uniq -u
- 可能这一部分稍微抽象那么一丢丢,不过稍加理解就ok的
参考资料
1 本人sort总结:https://blog.csdn.net/Lian_Ge_Blog/article/details/123524961?spm=1001.2014.3001.5501
2 linux命令(12)uniq去重 - 细雨微光 - 博客园 (cnblogs.com)
3 Linux 两个文件求交集、并集、差集 - molong1208 - 博客园 (cnblogs.com)