如何求两个文件的交集、并集和差集?------sort和uniq闪亮登场

        在日常开发中, 经常要对一些数据进行处理。 写个程序吧, 也可以实现, 但蛮麻烦的, 有些时候根本没有必要。 现在, a.txt和b.txt两个文件的数据都是逐行呈现的, 我们来说说如何求他们的交集、并集和差集。a.txt和b.txt中的内容为(注意, 高中时学的集合具有互异性, 而文件中的行却不一定有互异性):

taoge@localhost test> cat a.txt 
xxx
111
xxx
taoge@localhost test> cat b.txt 
111
888

 

 

        先说交集。 某次, 在某重要面试中, 遇到这样一个算法题: a.txt有3000万个无符号整数, 在b.txt中有3000个无符号整数, 求交集。 我当时给出了bitmap解决方法, 还算靠谱。 现在想来, 虽然是算法题目, 但如果答完后补充用命令来做, 那就更好了。 

        网上求交集的答案为:cat a.txt b.txt | sort | uniq -d   ,但是, 这个答案是有问题的, 比如:

taoge@localhost test> cat a.txt b.txt | sort | uniq -d
111
xxx
taoge@localhost test> 

        正确的命令应该是:

taoge@localhost test> sort a.txt | uniq > aa.txt
taoge@localhost test> sort b.txt | uniq > bb.txt
taoge@localhost test> cat aa.txt bb.txt | sort | uniq -d
111
taoge@localhost test> 

        d是duplicate的缩写, 表示输出重复的行。

 


        再看并集, 这个很简单:

taoge@localhost test> cat a.txt b.txt | sort | uniq
111
888
xxx
taoge@localhost test> 

 

 

 

 

 

        再看差集,网上给出的错误方法为:cat a.txt b.txt b.txt | sort | uniq -u,比如:

taoge@localhost test> cat a.txt b.txt b.txt | sort | uniq -u
taoge@localhost test> 

        正确的方法为:

taoge@localhost test> sort a.txt | uniq > aa.txt
taoge@localhost test> sort b.txt | uniq > bb.txt
taoge@localhost test> cat aa.txt bb.txt bb.txt | sort | uniq -u
xxx
taoge@localhost test> 

        u是unique的缩写, 表示输出唯一的行。

 

 

 

        回头看一下, 在求交集和差集的时候, 一定要注意, 养成先对文件sort和uniq的习惯。 另外, 求差集的方法非常巧妙, 需要仔细琢磨一下。

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值