使用bash查找不同文件/列表之间的共享行

时间:2012-01-11 21:29:55

标签: list share

我有几个列表如下:

LIST1

chr10   NM_000141
chr10   NM_000188
chr10   NM_000235
chr10   NM_000278
chr10   NM_000281
chr10   NM_000314
chr10   NM_000375
chr10   NM_000392
chr10   NM_000399
chr10   NM_000417

列表2

chr10   NM_000235
chr10   NM_000278
chr10   NM_000281
chr10   NM_000314
chr10   NM_000392
chr10   NM_000399
chr10   NM_000609
chr10   NM_000681
chr10   NM_000684
chr10   NM_000698

项目list3

chr10   NM_000235
chr10   NM_000188
chr10   NM_000278
chr10   NM_000314
chr10   NM_000399
chr10   NM_000609
chr10   NM_000684
chr10   NM_000818
chr10   NM_000872
chr10   NM_000917

我的问题是,如何使用bash查找所有3个列表共享的行? (比如这里很容易注意到chr10 NM_000235是所有三个人共享的) THX

1 个答案:

答案 0 :(得分:1)

使用comm命令

$ comm /path/to/file1/ /path/to/file2
$ comm -1 /path/to/file1/ /path/to/file2
$ comm -2 /path/to/file1/ /path/to/file2
$ comm -3 /path/to/file1/ /path/to/file2

其中

-1 : suppress lines unique to FILE1
-2 : suppress lines unique to FILE2
-3 : suppress lines that appear in both files

首先比较两个文件并将结果保存为“temp”。 (如果“temp”为空,则无需与第3个文件进行比较)。然后将temp与第三个文件进行比较。

我还提供了一个简短教程here的链接。