我正在处理大文件,我只想提取一列的值包含在另一个文件的列中的行。
例如,在file1中,我有10,000行看起来像这样:
Chr13998356 T C
Chr1401532 A G
Chr14021851 A T
我有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
我想以第三个文件结束:
Chr1 401532 A G 30 170 60 11
此文件可能有几行到10,000行。
在R中,我会使用df3 <- df2[df2[,1] %in% df1[,2],]
之类的东西,但文件太大了。
是否有简单的UNIX解决方案?像使用comm这样的东西,但只匹配第一列而不是整行,这将是完美的。或者grep的东西,但同时搜索10K模式。
有什么想法吗?
答案 0 :(得分: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