使用linux命令做差集

一、简介

在实际工作与学习中,分析数据时,我们常常会需要对比两个文件,查看他们的交集,差集,
我们可以使用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显示版本信息。
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值