共通列に基づいて2つのファイルをマージし、ファイル2に存在しないファイルに0を追加します。

共通列に基づいて2つのファイルをマージし、ファイル2に存在しないファイルに0を追加します。

共通データを共有する2つのファイルをマージしたいです。ファイル1には、ファイル2よりも多くのコンテンツが含まれています。共有列に基づいてファイル1の順序でファイルをマージしたいのですが、ファイル2に変数がない場合は、列5(AN1)に0を追加したいと思います。

私のファイルは次のとおりです。ファイル1

CHR BP  SNP CM  base
20  61098   rs6078030   -0.00024510777  1
20  61795   rs4814683   0   1
20  63231   rs6076506   0.0005026053    1
20  63244   rs6139074   0.00050714752   1

ファイル2

CHR BP  SNP CM  AN1
20 9836704 rs221007 0 1
20 9817032 rs221011 0 1
20 9764069 rs2206484 0 1
20 9639395 rs4816159 0 1

列3(SNP)に基づいて一致させたいです。今は他のすべての熱を維持したいと思います。

私が望む出力は次のとおりです(rsXがない場合は0)。

ファイル3

CHR BP  SNP CM  base AN1
20  61098   rs6078030   -0.00024510777  1   1
20  61795   rs4814683   0   1   1
20  63231   rs6076506   0.0005026053    1   1
20  63244   rs6139074   0.00050714752   1   1

これを行うには、1つ以上のステップが必要だと思います。最初のステップを実行するためにawkを試しましたが、空のファイルのみが作成されました。

awk -F' ' 'NR==FNR{e[$1$2]=1;next};e[$1$2]' file1 file 2 > file 3
awk -F' ' 'NR==FNR{e[$1$2]=1;next};e[1$2]' file2 file 1 > file 3

最後のステップになると思いますjoin file1 file 2 > file 3

答え1

awk 'NR==FNR{ snp[$3]; next }
{ $6=($3 in snp)?(FNR==1?"AN1":"1"):"0" }1' file2 file1

関連情報