我有两个文本文件,我想根据第二列中的匹配项加入它们。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
Run Code Online (Sandbox Code Playgroud)
预先感谢您的帮助,我真的很感激!对于一个新手问题表示歉意,我是一名生物学家,正在尝试提高他的计算能力,并且学习曲线很陡峭。
问候,
安东尼
从man join:
-a file_number
In addition to the default output, produce a line for each unpairable line in file file_number.
Run Code Online (Sandbox Code Playgroud)
这似乎正是您想要的。
因此,由于您希望 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
Run Code Online (Sandbox Code Playgroud)