与多个文件交叉

时间:2014-01-29 19:08:29

标签: diff intersection comm

我有4个文本文件,其中每个文件都有一列数据(每个文件大约2000行)。我想要做的是比较所有文件,并确定不同文件之间的重叠。所以,我想知道file1中的内容,但不知道其他3个文件,file2中的内容是什么,而其他3中没有,file1和file2中的内容只是等等。最终的目标是制作一个维恩图4个重叠的圆圈,显示文件之间的各种重叠。

我一直在试图弄清楚如何做到这一点。我一直在使用comm和diff命令,但是在使用所有文件时遇到了麻烦。有人会对如何做到这一点有任何建议吗?

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

假设4个文件命名为b c d

文件中存在的行但不存在于任何其他文件中(我假设^是未在任何文件中使用的字符):

for l in `cat a | sort | uniq`;do echo $l^`grep -c $l b c d`;done | grep 'b:0 c:0 d:0$' | cut -d\^ -f1

所有这些行中存在的行:

for l in `cat a | sort | uniq`;do echo $l^`grep -c $l b c d`;done | grep 'b:[1-9]* c:[1-9]* d:[1-9]*$' | cut -d\^ -f1

...