根据匹配的列加入两个文件,但保留不匹配的行?

时间:2014-08-22 19:26:27

标签: bash join

根据第二列中的匹配,我想要加入两个文本文件。 File1大于file2,包含file2中所有条目的匹配,以及许多不匹配。

加入工作,输出文件按预期加入匹配的条目。但是,我想保留file1中的不匹配条目,以便它们仍然出现在输出文件中。

这两个文件都是制表符分隔的。 File1有13列,file2有4.我在file1的第2列和file2的第1列之间进行匹配。

如何执行此操作,以使file1中不匹配的行仍出现在输出文件(file3)中?

我一直在使用以下代码(bash):

join -t $'\t' -1 2 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10,1.11,1.12,1.13,2.2,2.3,2.4 <(sort -k2,2 file1)  <(sort -k1,1 file2) > file3

先谢谢你的帮助,我真的很感激!对于新手问题道歉,我是一名试图提高计算能力的生物学家,学习曲线陡峭。

此致

安东尼

1 个答案:

答案 0 :(得分:2)

来自man join

-a file_number  
  In addition to the default output, produce a line for each unpairable line in file file_number.

这似乎正是你想要的。
因此,既然您希望file1中的行也出现在输出中,请在命令中添加-a 1

join -a 1 -t $'\t' -1 2 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10,1.11,1.12,1.13,2.2,2.3,2.4 <(sort -k2,2 file1)  <(sort -k1,1 file2) > file3