[转帖] 使用uniq命令求并集交集差集

使用,uniq,命令,交集 · 浏览次数 : 0

小编点评

**uniq 命令衍生功能** * **-c**选项:仅输出有重复的项。 * **-d**选项:将所有重复项放在一起。 * **-f**选项:仅输出第一列的重复项。 * **-g**选项:仅输出最小的重复项。 * **-i**选项:忽略文件存在性。 * **-k**选项:只输出第一个匹配的项。 * **-m**选项:仅输出最长的重复项。 * **-n**选项:仅输出与指定字符串匹配的项。 * **-o**选项:输出文件。 * **-p**选项:将所有重复项排在一起。 * **-q**选项:仅输出第一个字符的重复项。 * **-r**选项:将所有重复项按照字符排列。 * **-v**选项:显示详细的输出。

正文

 

 

原创:打码日记(微信公众号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命令求并集交集差集相似的内容:

[转帖] 使用uniq命令求并集交集差集

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 uniq# uniq是linux上非常有用的一个命令,从字面意思上就能看出来,它可以用来去重。 但使用uniq的前提是文件是排好序的,所以我们经常会搭配sort排序命令来一起使用uniq,如下: $ cat test.t

[转帖] q命令-用SQL分析文本文件

https://www.cnblogs.com/codelogs/p/16060830.html 简介# 在Linux上分析文本文件时,一般会使用到grep、sed、awk、sort、uniq等命令,但这些命令都有一定的学习成本,而如果是用SQL来分析数据的话,这对广大后端程序员来说,就要简单很多了

[转帖] q命令-用SQL分析文本文件

https://www.cnblogs.com/codelogs/p/16060830.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 在Linux上分析文本文件时,一般会使用到grep、sed、awk、sort、uniq等命令,但这些命令都有一定的

[转帖]010 Linux 文本统计与去重 (wc 和 uniq)

https://my.oschina.net/u/3113381/blog/5427461 wc 命令一般是作为组合命令的一员与其他命令一同起到统计的作用。而一般情况下使用 wc -l 命令较多。 uniq 可检查文本文件中重复出现的行,一般与 sort 命令结合使用。一起组合搭配使用完成统计、排序

[转帖]使用JMX服务监控Java程序性能

https://www.jianshu.com/p/3c3c836c1c20?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 背景 单机收集服务器需要性能监控和测试。 JMX

[转帖]使用 tc netem 模拟网络异常

https://cizixs.com/2017/10/23/tc-netem-for-terrible-network/ 在某些情况下,我们需要模拟网络很差的状态来测试软件能够正常工作,比如网络延迟、丢包、乱序、重复等。linux 系统强大的流量控制工具 tc 能很轻松地完成,tc 命令行是 ipr

[转帖]使用 sysdig 进行监控和调试 linux 机器

https://cizixs.com/2017/04/27/sysdig-for-linux-system-monitor-and-analysis/ sysdig 简介 sysdig 官网 上对自己的介绍是: Open Source Universal System Visibility With

[转帖]使用MAT命令行工具生成堆dump分析文件

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标 Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆

[转帖]使用火焰图(FlameGraph)分析程序性能

火焰图概念 火焰图(FlameGraph)是 svg 格式的矢量图,是先通过 perf 等工具分析得到结果,并将该结果生成的具有不同层次且支持互动的图片,看起来就像是火焰,这也是它的名字的由来。表现形式如下所示: 需要注意以下几点: 纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函

[转帖]使用Prometheus和Grafana监控RabbitMQ集群 (使用RabbitMQ自带插件)

https://www.cnblogs.com/hahaha111122222/p/15683696.html 配置RabbitMQ集群 官方文档:https://www.rabbitmq.com/prometheus.html#quick-start 官方github地址:https://gith