一致する列で2つのファイルを結合する

一致する列で2つのファイルを結合する

ファイル1.txt

    id                            No
    gi|371443199|gb|JH556661.1| 7907290
    gi|371443198|gb|JH556662.1| 7573913
    gi|371443197|gb|JH556663.1| 7384412
    gi|371440577|gb|JH559283.1| 6931777

ファイル2.txt

 id                              P       R       S
 gi|367088741|gb|AGAJ01056324.1| 5       5       0
 gi|371443198|gb|JH556662.1|     2       2       0
 gi|367090281|gb|AGAJ01054784.1| 4       4       0
 gi|371440577|gb|JH559283.1|     21      19      2

出力.txt

 id                              P       R       S  NO
 gi|371443198|gb|JH556662.1|     2       2       0  7573913
 gi|371440577|gb|JH559283.1|     21      19      2  6931777

File1.txtには2つの列があり、File2.txtには4つの列があります。一意のIDを持つ2つのファイルを結合したい(配列[1]は2つのファイル(file1.txtとfile2.txt)で一致する必要があります)。一致するID出力のみを提供したいです(output.txtを参照)。

私は一生懸命働いたjoin -v <(sort file1.txt) <(sort file2.txt)。 awkまたはJoinコマンドの助けを求めます。

ベストアンサー1

join良い結果:

$ join <(sort File1.txt) <(sort File2.txt) | column -t | tac
 id                           No       P   R   S
 gi|371443198|gb|JH556662.1|  7573913  2   2   0
 gi|371440577|gb|JH559283.1|  6931777  21  19  2

PS:出力列の順序は重要ですか?

その場合は、以下を使用してください。

$ join <(sort 1) <(sort 2) | tac | awk '{print $1,$3,$4,$5,$2}' | column -t
 id                           P   R   S  No
 gi|371443198|gb|JH556662.1|  2   2   0  7573913
 gi|371440577|gb|JH559283.1|  21  19  2  6931777

おすすめ記事