信不信由你,我在互联网上搜索了所有内容,但尚未在AWK中找到解决此问题的可行解决方案。

我有两个文件,A和B:

文件A:

chr1   pos1
chr1   pos2
chr2   pos1
chr2   pos2

文件B:
chr1 pos1
chr2 pos1
chr3 pos2

所需的输出:
chr1 pos1
chr2 pos1

我想加入这两个文件,以便基本上基于第一和第二列(而不仅仅是第一列)获得两个文件之间的交集。既然是这种情况,大多数简单的脚本将无法工作,并且加入似乎也不是一种选择。

有任何想法吗?

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

最佳答案

哼,我的主意如下:
使用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

编辑:进行编辑后,联接解决方案仍然可以使用(带有选项),因此概念仍然正确(imo)。

09-19 22:58