文件2的子集行基于文件1 UNIX中单列的公共值

use*_*950 2 unix awk grep comm

我正在处理大文件,我只想提取一列的值包含在另一个文件的列的值中的行.

例如,在file1中,我有10,000行看起来像这样:

Chr13998356 T   C
Chr1401532  A   G
Chr14021851 A   T
Run Code Online (Sandbox Code Playgroud)

我有file2(100,000+行),其中我只想要文件1的第1列中第1列中的值的行.因此,对于文件2,我有:

Chr1    401530  G   G   60  0   60  11
Chr1    401531  A   A   60  0   60  11
Chr1    401532  A   G   30  170 60  11
Run Code Online (Sandbox Code Playgroud)

我想以第三个文件结束:

Chr1    401532  A   G   30  170 60  11
Run Code Online (Sandbox Code Playgroud)

此文件可以包含几到10,000行.

在R中,我会使用类似的东西df3 <- df2[df2[,1] %in% df1[,2],],但文件太大了.

有简单的UNIX解决方案吗?像使用comm这样的东西,但只匹配第一列而不是整行,这将是完美的.或者grep的东西,但同时搜索10K模式.

有任何想法吗?

Ed *_*ton 6

$ cat file1
Chr13998356 T   C
Chr1401532  A   G
Chr14021851 A   T

$ cat file2
Chr1    401530  G   G   60  0   60  11
Chr1    401531  A   A   60  0   60  11
Chr1    401532  A   G   30  170 60  11

$ awk 'NR==FNR{vals[$1];next} ($1$2) in vals' file1 file2
Chr1    401532  A   G   30  170 60  11
Run Code Online (Sandbox Code Playgroud)