![列出两个纯数据集之间的差异和重叠](https://linux22.com/image/20382/%E5%88%97%E5%87%BA%E4%B8%A4%E4%B8%AA%E7%BA%AF%E6%95%B0%E6%8D%AE%E9%9B%86%E4%B9%8B%E9%97%B4%E7%9A%84%E5%B7%AE%E5%BC%82%E5%92%8C%E9%87%8D%E5%8F%A0.png)
可能的重复:
将文件视为集合并对其执行集合操作的 Linux 工具
我有两个数据集,A 和 B。每个数据集的格式是每行一个数字。例如,
12345
23456
67891
2345900
12345
A中的一些数据不包含在数据集B中。如何列出A中的所有这些数据,以及如何列出A和B共享的所有数据。如何使用Linux/UNIX命令来做到这一点?
答案1
使用comm
命令。
如果您列出的是文件listA
并且listB
:
comm listA listB
默认情况下,comm 将返回 3 列。仅在 listA 中的项目、仅在 listB 中的项目以及两个列表共有的项目。
您可以使用 、 或 arg 抑制-1
单个-2
列-3
。
答案2
这将为您提供 A 中存在但 B 中不存在的独特项目:
cat A|perl -ne '$z=$_;chomp($z);$y=`grep $z B`;if ($y== "") {print "\n$z";}'|sort -u
这将为您提供 A 和 B 中常见项目的列表:
cat A |xargs -i grep {} B|sort -u