【问题标题】:intersection with multiple files与多个文件相交
【发布时间】:2014-02-21 19:14:41
【问题描述】:
我有 4 个文本文件,其中每个文件都有一列数据(每个文件中约 2000 行)。我想做的是比较所有文件,并确定不同文件之间的重叠是什么。所以,我想知道 file1 中有什么,其他 3 个文件没有,file2 中有什么,其他 3 个没有,file1 和 file2 有什么,等等。最终目标是用4 个重叠圆圈显示文件之间的各种重叠。
我一直在绞尽脑汁想弄清楚如何做到这一点。我一直在使用 comm 和 diff 命令,但在处理所有文件时遇到了麻烦。有人对如何做到这一点有任何建议吗?
感谢您的任何帮助或建议。
【问题讨论】:
标签:
diff
intersection
comm
【解决方案1】:
假设有 4 个文件名为 a b c d
存在于文件 a 但不存在于其他任何文件中的行(我假设 ^ 是一个未在任何文件中使用的字符):
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
...