共通データを共有する2つのファイルをマージしたいです。 File1には複数のファイルが含まれています2。共有列(3)を基準にファイル1を基準にファイルをマージしたいのですが、ファイル2に変数がなければ5番目の列(AN1)に0を追加して、あれば追加したいと思います。 AN1(連続変数)の元の値。
私のファイルは次のとおりです。ファイル1
CHR BP SNP CM base
10 99969507 rs35122894 0 0.23
10 99966455 rs17451447 0 1
10 99964768 rs72826281 0 0.43
10 9996313 rs111848993 0 0.01
ファイル2
CHR BP SNP CM AN1
10 99969507 rs35122894 0 1.000000000000000
10 99966455 rs17451447 0 0.678999997353345
10 99964768 rs72826281 0 0.876534244415788
10 9996313 rs111848993 0 0.003456777789882
列3(SNP)に基づいて一致させたいです。今は他のすべての熱を維持したいと思います。
私が望む出力は次のとおりです。ファイル3
CHR BP SNP CM base AN1
10 99969507 rs35122894 0 0.23 1.000000000000000
10 99966455 rs17451447 0 1 0.678999997353345
10 99964768 rs72826281 0 0.43 0.876534244415788
10 9996313 rs111848993 0 0.01 0.003456777789882
私はawkを使ってこれをやろうとしています。
awk 'NR==FNR{ snp[$3]; next }
{ $6=($3 in snp)?(FNR==?"AN1[$5]):"0" }1' file2 file1 > file3
awk 'NR==FNR{a[$3]=$5;next} {print $1,$2,a[$3],$4,$5,$6}' File2 File1 > file3
答え1
$ awk 'NR==FNR{an1[$3]=$5; next} {print $0, an1[$3]}' file2 file1
CHR BP SNP CM base AN1
10 99969507 rs35122894 0 0.23 1.000000000000000
10 99966455 rs17451447 0 1 0.678999997353345
10 99964768 rs72826281 0 0.43 0.876534244415788
10 9996313 rs111848993 0 0.01 0.003456777789882
0
質問の下のあなたのコメントに従って配列にないときにSNP値を印刷するには、次の手順を実行します。
awk 'NR==FNR{an1[$3]=$5; next} {print $0, ($3 in an1 ? an1[$3] : 0)}' file2 file1