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

1) 求并集
[bash toolbar=”false”]$ sort a b | uniq [/bash]

2) 求交集
[bash toolbar=”false”]$ sort a b | uniq -d [/bash]

3) 求差集

我以往的做法是 comm命令:
[bash toolbar=”false”]$ comm -13 <(sort file1) <(sort file2) [/bash]
列出file1中不包含的,file2中包含的
[bash toolbar=”false”]$ comm -23 <(sort file1) <(sort file2) [/bash]

xuyou这里给出一个用 grep 的方式:
[bash toolbar=”false”]$ grep -F -f listb lista -v [/bash]
同时他还提到comm不精准,这个缺乏仔细推理,我不太认可。
http://blog.youxu.info/2007/05/24/setop-under-linux-cli/

简单一点 -F 也可以省略掉
[bash toolbar=”false”]$ grep -f a b -v [/bash]

求差集的方法3:
差集(A-B),把B的元素重复2份和A的元素放到一起排序,只输出出现一次的项:
[bash toolbar=”false”]$ sort a b b | uniq -u [/bash]
过滤掉重复的,见下图,

如果明确b集合是a集合的子集,只需要
[bash toolbar=”false”]$ sort a b | uniq -u [/bash]
即可找出 a-b的结果

求两个集合交集,并集,差集的方法,comm和grep》上有2个想法

  1. `grep -v -f a b’ 的行为不符合差集的定义,当 a 的行数大于 b 的时候,不会显示 a 比 b 多的行

发表评论

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