求两个集合交集,并集,差集的方法,comm和grep

1) 求并集

$ sort a b | uniq 

2) 求交集

$ sort a b | uniq -d 

3) 求差集

我以往的做法是 comm命令:

$ comm -13 <(sort file1) <(sort file2) 

列出file1中不包含的,file2中包含的

$ comm -23 <(sort file1) <(sort file2) 

xuyou这里给出一个用 grep 的方式:

$ grep -F -f listb lista -v 

同时他还提到comm不精准,这个缺乏仔细推理,我不太认可。
http://blog.youxu.info/2007/05/24/setop-under-linux-cli/

简单一点 -F 也可以省略掉

$ grep -f a b -v 

求差集的方法3:
差集(A-B),把B的元素重复2份和A的元素放到一起排序,只输出出现一次的项:

$ sort a b b | uniq -u 

过滤掉重复的,见下图,

如果明确b集合是a集合的子集,只需要

$ sort a b | uniq -u 

即可找出 a-b的结果

求两个集合交集,并集,差集的方法,comm和grep》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注