一、简介
在实际工作与学习中,分析数据时,我们常常会需要对比两个文件,查看他们的交集,差集,
我们可以使用spark中的intersection、subtract、union和distinct等算子得到我们想要的结果,那么我们是否还有其他一种方式获取这些结果呢?当然,今天我们就使用linux命令来分析数据
如图,我们想要得到阴影部分的数据
二、如何使用
我们可以使用
sort a.csv b.csv b.csv |uniq -u
因为对于a.csv和b.csv来说,取得的差集(如下)为a和b各自的差集之和,如下图
sort a.csv b.csv|uniq -u
这时候,再和b.csv取差集,即刻剔除右边差集,取到我们想要的真正的差集
三、示例
(1)两个文件如下
cat a.csv
aaa
bbb
ccc
ddd
fff
cat b.csv
bbb
ccc
ddd
eee
(2)差集
选取出现次数只有一次的元素(求a.csv和b.csv差集)。
图二结果
cat a.csv b.csv |sort|uniq -cu
1 aaa
1 eee
1 fff
图一结果
cat a.csv b.csv b.csv|sort|uniq -cu
1 aaa
1 fff
(3)并集
选取出现次数大于等于2的元素(求a.csv和b.csv交集)。
cat a.csv b.csv |sort|uniq -cd
2 bbb
2 ccc
2 ddd
(3)合集
sort a.csv b.csv |uniq -c
1 aaa
2 bbb
2 ccc
2 ddd
1 eee
1 fff
附:Uniq的用法
语法
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
参数:
-c
或--count
在每列旁边显示该行重复出现的次数。-d
或--repeated
仅显示重复出现的行列。
-f
<栏位>或--skip-fields=<栏位>
忽略比较指定的栏位。
-s
<字符位置>或--skip-chars=<字符位置>
忽略比较指定的字符。
-u
或--unique
仅显示出一次的行列。
-w
<字符位置>或--check-chars=<字符位置>
指定要比较的字符。
--help
显示帮助。
--version
显示版本信息。
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。