基于两列连接两个文件

Nic*_*ick 9 bash awk

信不信由你,我在互联网上搜索过,并没有在AWK中找到解决这个问题的工作方案.

我有两个文件,A和B:

文件A:

chr1   pos1   
chr1   pos2
chr2   pos1
chr2   pos2
Run Code Online (Sandbox Code Playgroud)

档案B:

chr1 pos1
chr2 pos1
chr3 pos2
Run Code Online (Sandbox Code Playgroud)

期望的输出:

chr1 pos1
chr2 pos1
Run Code Online (Sandbox Code Playgroud)

我想加入这两个文件,基本上根据第一列和第二列,而不仅仅是第一列,得到两个文件之间的交集.由于这种情况,大多数简单的脚本都不起作用,加入似乎不是一个选项.

有任何想法吗?

编辑:对不起,我没有提到有更多的专栏,而不仅仅是我展示的两个专栏.我在我的例子中只显示了两个因为我只对两个文件之间的前两列相同感兴趣,其余的数据并不重要(但仍然在文件中)

Aif*_*Aif 10

嗯,我的想法如下:join用于合并两个文件并用awk更正

$ join  A B 
chr1 pos1 pos1
chr1 pos2 pos1
chr2 pos1 pos1
chr2 pos2 pos1

$ join  A B | awk '{ if ($2==$3) printf("%s %s\n", $1, $2) }'
chr1 pos1 pos1
chr2 pos1 pos1
Run Code Online (Sandbox Code Playgroud)

编辑:给定编辑,连接解决方​​案仍然可以工作(带选项),因此概念保持正确(imo).


gle*_*man 5

awk 解决方案是:

awk 'FILENAME==ARGV[1] {pair[$1 " " $2]; next} ($1 " " $2 in pair)' fileB fileA
Run Code Online (Sandbox Code Playgroud)

首先放置较小的文件,因为您基本上必须将它保存在内存中。