[转帖] 使用uniq命令求并集交集差集
原创:打码日记(微信公众号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.txt
减test2.txt
的差集,第二列是test2.txt
减test1.txt
的差集,第三列就是交集。
如果只想要交集,可使用comm -1 -2
或comm -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命令求并集交集差集的更多相关文章
- 【Set】Set集合求并集,交集,差集
/** * @author: Sam.yang * @date: 2020/11/16 11:14 * @desc: Set集合操作工具类 */ public class SetOptUtils { ...
- Linux 求文件交集 差集等
使用comm命令 假设两个文件FILE1和FILE2用集合A和B表示,FILE1内容如下: a b c e d a FILE2内容如下: c d a c 基本上有两个方法,一个是comm命令,一个是g ...
- java数组并集/交集/差集(补集)
1.说明 使用java容器类的性质选择容器 2.实现 package com.wish.datastrustudy; import java.util.HashSet; import java.uti ...
- python求两个列表的并集.交集.差集
求两个列表的差集 >>> a = [1,2,3] >>> b=[1,2] >>> ################################ ...
- [Linux] 取两个文件的并集/交集/差集
uniq -d是只打印重复行 -u是只打印独一无二的行文件A : abcd文件B: cdef取并集:A + B sort A B|uniq 取交集: sort A B|uniq -d 取差集:A - ...
- python 两个list 求交集,并集,差集
def diff(listA,listB): #求交集的两种方式 retA = [i for i in listA if i in listB] retB = list(set(listA).inte ...
- 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 ...
- PHP求并集,交集,差集
PHP求并集,交集,差集 一.总结 一句话总结:在php中如果我想要对两个数组进行如并集.交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersec ...
- java(List或Array数组)求交集、并集、差集, 泛型工具类
业务需要求不同类型的交集.并集.差集为避免代码冗余编写工具类. 注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n ...
- JS 对象 数组求并集,交集和差集
一.JS数组求并集,交集和差集 需求场景 最近,自己项目中有一些数组操作,涉及到一些数学集的运算,趁着完成后总结一下. 简化问题之后,现有两数组a = [1, 2, 3],b = [2, 4, 5], ...
随机推荐
- 【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?
摘要:AI技术发展,正由应用落地阶段向效率化生产阶段演进,AI工程化能力将会不断深入业务,释放企业生产力. 本文分享自华为云社区<[云享·人物]华为云AI高级专家白小龙:AI如何释放应用生产力, ...
- OpenHarmony移植:XTS子系统之应用兼容性测试套件
摘要:本文通过实例分析下ACTS应用兼容性测试套件移植案例,以及移植过程中特定的操作的原理. 本文分享自华为云社区<移植案例与原理 - XTS子系统之应用兼容性测试套件>,作者:zhush ...
- Java 项目工程搭建 --创建子模块(Spring Initializr)
一下篇,常用 Java 项目工程搭建 --创建子模块(依赖父工程) 也不算常用,常用的是 ctrl+c.ctrl+v ,哈哈 Package要手动改下,生成的很丑 选能支持 Alibaba Cl ...
- JSP标准标签库(JSTL)个人使用指南
前排提示,本篇仅涉及 JSTL 的配置和简要介绍 JSTL 的 Core 和 Functions 标签库中几个常用的标签.更加详细的内容,博主会贴相应超链接. 注意:本教程使用的 JSTL 1.2,如 ...
- 【网络爬虫学习】Python 爬虫初步
本系列基于 C语言中文网的 Python爬虫教程(从入门到精通)来进行学习的, 部分转载的文章内容仅作学习使用! 前言 网络爬虫又称网络蜘蛛.网络机器人,它是一种按照一定的规则自动浏览.检索网页信息的 ...
- Codeforces 451B Sort the Array(水题)
题目连接:Codeforces 451B Sort the Array 题目大意:给出一个长度为n的序列,可以有一次机会旋转a[l]到a[r]之间的数,问说可否形成一个递增序列. 解题思路:将数组排下 ...
- 数字孪生 3D 风电场,智慧风电之海上风电
前言 截止 2021 年,全球已有 127 个国家做出了"碳中和"的承诺,能源低碳转型和实现碳中和已经成为全球共同的战略目标.根据权威机构预测,到 2050 年,可再生能源发电将占 ...
- 【Serverless实战】传统单节点网站的Serverles
什么是函数?刚刚考完数学没多久的我,脑里立马想到的是自变量.因变量.函数值,也就是y=f(x).当然,在计算机里,函数function往往指的是一段被定义好的代码程序,我们可以通过传参调用这个定义好的 ...
- echarts自定义legend样式
https://blog.csdn.net/changyana/article/details/126281275
- mixin混合
多个组件有相同的逻辑,抽离出来 mixin并不是完美的解决方案,会有一些问题 vue3提出composition api旨在解决这些问题