我正在处理大文件,我只想提取其中一列的值包含在另一个文件的一列的值中的行。
例如,在 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 个模式。
有什么想法吗?
最佳答案
$ 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
关于unix - 根据文件 1 UNIX 中单个列的公共(public)值对文件 2 的行进行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23703766/