码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2017-08-30 20:05:47      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:silver   root   比较   查看   com   nbsp   roo   cookie   app   

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@xuexi tmp]# cat <<eof>set1.txt
> orange
> gold
> apple
> sliver
> steel
> iron
> eof
[root@xuexi tmp]# cat <<eof>set2.txt
> orange
> gold
> cookiee
> carrot
> eof

使用comm命令。

[root@xuexi tmp]# comm set1.txt set2.txt
apple
                orange
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
                gold
        cookiee
        carrot
silver
steel
iron

提示没有排序,所以comm必须要保证比较的文件是有序的。

[root@xuexi tmp]# sort set1.txt -o set1.txt;sort set2.txt -o set2.txt
[root@xuexi tmp]# comm set1.txt set2.txt                             
apple
        carrot
        cookiee
                gold
iron
                orange
silver
steel

结果中输出了3列,每一列使用制表符\t隔开。第一列是set1.txt中有而set2.txt中没有的,第二列则是set2.txt中有而set1.txt中没有的,第三列是set1.txt和set2.txt中都有的。

根据这三列就可以求出交集、差集和求差。

交集就是第三列。使用-1和-2分别删除第一第二列就是第三列的结果。

[root@xuexi tmp]# comm set1.txt set2.txt -1 -2
gold
orange

A对B的差集就是第一列,B对A的差集就是第二列。

[root@xuexi tmp]# comm set1.txt set2.txt  -2 -3  # A对B的差集
apple
iron
silver
steel
[root@xuexi tmp]# comm set1.txt set2.txt  -1 -3   # B对A的差集
carrot
cookiee

A和B的求差就是第一列和第二列的组合。

[root@xuexi tmp]# comm set1.txt set2.txt  -3  
apple
        carrot
        cookiee
iron
silver
steel

但是这样分两列的结果不方便查看,应该进行处理使它们显示在同一列上。

[root@xuexi tmp]# comm set1.txt set2.txt  -3 | tr "\t" "\0"
apple
carrot
cookiee
iron
silver
steel

 

回到系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/7454694.html

注:若您觉得这篇文章还不错请点击下右下角的推荐,有了您的支持才能激发作者更大的写作热情,非常感谢!

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

标签:silver   root   比较   查看   com   nbsp   roo   cookie   app   

原文地址:http://www.cnblogs.com/f-ck-need-u/p/7454694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!