我想合并/加入或生成一个新的合并文件。两个文件的第一列中都包含共同的 ID。
文件 1 看起来像这样
ID
Tb927.4.4670
Tb927.8.3630
Tb09.160.4310
Tb927.8.3650
文件 2 包含每个基因的 ID 和功能,如下所示
ID Function 1 Other field
Tb09.211.0140 A eg
Tb11.03.0080 B eg
Tb927.8.6200 C eg
Tb927.7.690 D eg
然而,我的文件 2 中缺少一些 ID,因为并非所有基因都具有已知功能,因此我的文件 2 中的字段少于文件 1 中的字段。文件 2 中的 ID 的排序方式也与文件 1 不同。
我希望我的合并文件遵循文件 1 中的顺序,并在输出中包含合并函数。对于缺失的 ID,它可以为空,也可以为 return '-' 之类的内容。
是否可以使用linux命令合并此类文件?
答案1
使用awk
awk 'NR == FNR{a[$1]=$0; next};
($1 in a){print a[$1]; next};
{print $1, "-", "-"}' file2 file1
或者稍微简洁一些
awk 'NR == FNR{a[$1]=$0; next};
{print $1 in a?a[$1]:$1FS"-"FS"-"}' file2 file1
答案2
只需使用sort(1)
您的大量文件,该程序就足够智能,如果文件已经排序,则可以合并。