シェルコマンドを使用してソートされていないファイルをソートされたファイルにマージする

シェルコマンドを使用してソートされていないファイルをソートされたファイルにマージする

新しいマージファイルをマージ/結合または作成したいです。どちらのファイルも、最初の列に共通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)プログラムはすでにソートされたファイルをマージするのに十分スマートです。

関連情報