原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。

uniq#

uniq是linux上非常有用的一个命令,从字面意思上就能看出来,它可以用来去重。 
但使用uniq的前提是文件是排好序的,所以我们经常会搭配sort排序命令来一起使用uniq,如下:

$ cat test.txt
c
a
a
b $ sort test.txt | uniq
a
b
c # sort -u 也能去重
$ sort -u test.txt
a
b
c

如上所示,由于sort -u也能达到去重的效果,导致uniq的原本功能就显得不那么有用了。 
其实经常会发现这样的linux命令,衍生功能比原始功能更有用,比如wc命令,全名是word count,即单词计数,但我们最常用的却是wc -l获取行数。 
wc一样,uniq的衍生功能也比原始去重功能要有用得多,如下:

分组计数uniq -c#

$ sort test.txt | uniq -c
      2 a
      1 b
      1 c

-c选项可以统计每个值的个数,超级有用,还有下面这个按状态统计TCP连接数的。

$ netstat -nat|awk '/tcp/{print $NF}'|sort|uniq -c
      4 CLOSE_WAIT
      6 ESTABLISHED
      2 LAST_ACK
      2 LISTEN

求并集#

$ cat test1.txt
c
a
b $ cat test2.txt
c
b
d $ cat test1.txt test2.txt |sort |uniq
a
b
c
d

很显然,两个文件合并后,再去重,就是并集了。

求交集#

$ cat test1.txt test2.txt | sort | uniq -d
b
c

-d选项的作用是只输出有重复的项,显然,两个文件合并,重复项就是交集。

求差集#

$ cat test1.txt test2.txt test2.txt| sort | uniq -u
a

-u选项的作用是只输出唯一的项,显然,如果test2.txt中的项在text1.txt中也存在,这一项就不会输出,另外,为了让test2.txt的内容不输出,故意让其cat了两次。

comm#

comm命令可以更直观的求并集,交集与差集,同样,交给comm处理的数据,也要事先排好序,如下:

$ comm <(sort -u test1.txt) <(sort -u test2.txt)
a
                b
                c
        d

<()是bash下的命令替换语法,它类似于生成一个临时虚拟文件,且文件内容就是命令的输出内容。
如上,第一列是test1.txttest2.txt的差集,第二列是test2.txttest1.txt的差集,第三列就是交集。 
如果只想要交集,可使用comm -1 -2comm -12-1 -2表示不显示第一列与第二列,同理-3就是不显示第三列。 
啥,你说它没有并集?看下面,用tr把空白删掉就好了嘛!

$ comm <(sort -u test1.txt) <(sort -u test2.txt)|tr -d '\t'
a
b
c
d

往期内容#

mysql的timestamp会存在时区问题?
hex,base64,urlencode编码方案对比
字符编码解惑
真正理解可重复读事务隔离级别
Linux文本命令技巧(下)
Linux文本命令技巧(上)

作者:打码日记

出处:https://www.cnblogs.com/codelogs/p/16060364.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

[转帖] 使用uniq命令求并集交集差集的更多相关文章

  1. 【Set】Set集合求并集,交集,差集

    /** * @author: Sam.yang * @date: 2020/11/16 11:14 * @desc: Set集合操作工具类 */ public class SetOptUtils { ...

  2. Linux 求文件交集 差集等

    使用comm命令 假设两个文件FILE1和FILE2用集合A和B表示,FILE1内容如下: a b c e d a FILE2内容如下: c d a c 基本上有两个方法,一个是comm命令,一个是g ...

  3. java数组并集/交集/差集(补集)

    1.说明 使用java容器类的性质选择容器 2.实现 package com.wish.datastrustudy; import java.util.HashSet; import java.uti ...

  4. python求两个列表的并集.交集.差集

    求两个列表的差集 >>> a = [1,2,3] >>> b=[1,2] >>> ################################ ...

  5. [Linux] 取两个文件的并集/交集/差集

    uniq -d是只打印重复行 -u是只打印独一无二的行文件A : abcd文件B: cdef取并集:A + B sort A B|uniq 取交集: sort A B|uniq -d 取差集:A - ...

  6. python 两个list 求交集,并集,差集

    def diff(listA,listB): #求交集的两种方式 retA = [i for i in listA if i in listB] retB = list(set(listA).inte ...

  7. Linux comm命令求出文件的交集、差集

    A(1,2,3)和B(3,4,5),A和B的交集是3,A对B的差集是1和2,B对A的差集是4和5,A和B求差的结果是1.2.4.5. 在Linux中可以使用comm命令求出这些集. [root@xue ...

  8. PHP求并集,交集,差集

    PHP求并集,交集,差集 一.总结 一句话总结:在php中如果我想要对两个数组进行如并集.交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersec ...

  9. java(List或Array数组)求交集、并集、差集, 泛型工具类

    业务需要求不同类型的交集.并集.差集为避免代码冗余编写工具类. 注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n ...

  10. JS 对象 数组求并集,交集和差集

    一.JS数组求并集,交集和差集 需求场景 最近,自己项目中有一些数组操作,涉及到一些数学集的运算,趁着完成后总结一下. 简化问题之后,现有两数组a = [1, 2, 3],b = [2, 4, 5], ...

随机推荐

  1. 垃圾回收你懂,Java垃圾回收你懂吗?

    摘要:在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存.而 Java 不一样,它有垃圾回收器,释放内存由回收器负责.本文接下来将介绍Java垃圾收集的知识原理. java内存区域 Q: J ...

  2. ModelBox姿态匹配:抖抖手动动脚勤做深呼吸

    摘要:本案例使用Windows版本的ModelBox SDK进行二次开发,主要是针对姿态匹配案例开发实践. 本文分享自华为云社区<姿态匹配:抖抖手动动脚勤做深呼吸>,作者:吴小鱼. 在之前 ...

  3. CANN 5.0黑科技解密 | 算力虚拟化,让AI算力“物尽其用”

    摘要:算力虚拟化技术对消费者而言,可有效降低算力的使用成本,对于设备商或运营商而言,则可极大提升算力资源的利用率,降低设备运营成本. 为什么要做算力虚拟化 近年来,人工智能领域呈井喷式发展,算力就是生 ...

  4. 一文读懂火山引擎A/B测试的实验类型(3)——多链接实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一. 概述 多链接实验,也称为Split url实验,用户根据分流结果访问不同版本的url. 举个例子: 当您有两 ...

  5. ScreenToGif 录屏转git图片

    ScreenToGif 一款开源的屏幕录制,允许您记录屏幕的选定区域.网络摄像头的实时信息或素描板上的实时绘图.之后,您可以编辑动画并将其保存为 gif.apng.视频.psd 或 png 图像. 官 ...

  6. 【Django-Vue】手机号是否存在接口 多方式登录接口 腾讯云短信介绍和申请 api与sdk

    目录 昨日回顾 今日内容 0 登录注册功能设计 1 短信登录接口 视图类 2 多方式密码登录接口 视图类 序列化类 路由 3 腾讯云短信介绍和申请 3.1api与sdk 补充 练习 昨日回顾 # 你的 ...

  7. Go--gjson

    GJSON 是一个用于处理 JSON 数据的 Go 语言库.它提供了一些方便的功能,例如解析 JSON 字符串.查询 JSON 对象.生成 JSON 对象等 下载gjson: go get -u gi ...

  8. springboot 整合 ehcahe后,实现缓存数据 应用关闭时序列化(磁盘持久化),重启再加载

    ehcache使用很长时间了,但是却没有用到缓存数据序列化(C#中是这么个说法)与再加载.这次因为业务中需要对缓存数据进行临时存储并再加载使用,实现该功能的方式多种多样.既然ehcache有磁盘保存机 ...

  9. 【网络爬虫学习】Python 爬虫初步

    本系列基于 C语言中文网的 Python爬虫教程(从入门到精通)来进行学习的, 部分转载的文章内容仅作学习使用! 前言 网络爬虫又称网络蜘蛛.网络机器人,它是一种按照一定的规则自动浏览.检索网页信息的 ...

  10. 使用 Sealos 一键部署 Kubernetes 集群

    Sealos 是一款以 Kubernetes 为内核的云操作系统发行版,使用户能够像使用个人电脑一样简单地使用云. 与此同时,Sealos 还提供一套强大的工具,可以便利地管理整个 Kubernete ...