2

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

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

Chr13998356 T   C
Chr1401532  A   G
Chr14021851 A   T

我在文件 2(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

我想最终得到第三个文件:

Chr1    401532  A   G   30  170 60  11

该文件可能有几行到 10,000 行之间的任何地方。

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

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

有任何想法吗?

4

1 回答 1

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
于 2014-05-16T20:16:55.820 回答