新しいマージファイルをマージ/結合または作成したいです。どちらのファイルも、最初の列に共通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 がないため、ファイル 1 よりもファイル 2 のフィールドが少なくなります。ファイル2のIDもファイル1とは異なります。
マージされたファイルはファイル1の順序に従い、出力にマージ機能を含めたいと思います。空または欠落しているIDの場合、「-」などの項目を返すことができます。
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)
プログラムはすでにソートされたファイルをマージするのに十分スマートです。