共通データを共有する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