ファイルAとファイルBが2つのタブ区切りファイルであり、ファイルAの最初の2つの列をファイルBの最初の2つの列と比較し、項目でない場合は、ファイルBの値を出力に印刷する必要があります。可能印刷は該当しません。次は私です
fileA.txt
id freq.var
chr12_56487682_56487682_T_A 0
chr3_52436344_52436344_C_G 0
chr19_9091288_9091288_G_T 0
chr12_44172075_44172075_A_C 0.05739626
chr19_9048431_9048431_A_G 0.033832938
chr12_56487678_56487678_T_G 0
chr17_37881646_37881646_T_G 0
chr19_9002576_9002576_T_C 0.0342902
chr15_63991054_63991054_T_G 0.024456501
chr17_29554589_29554589_C_T 0.095445774
fileB.txt
id freq.var
chr12_56487682_56487682_T_A 0.0035266
chr19_9048431_9048431_A_G 0.033832938
chr3_52436344_52436344_C_G 0.002500443
chr12_44172075_44172075_A_C 0.05739626
chr19_9002576_9002576_T_C 0.0342902
chr17_29554589_29554589_C_T 0.095445774
chr15_63991054_63991054_T_G 0.024456501
以下は予想される結果です
id freq.var
chr12_56487682_56487682_T_A 0.0035266
chr3_52436344_52436344_C_G 0.002500443
chr19_9091288_9091288_G_T NA
chr12_44172075_44172075_A_C 0.05739626
chr19_9048431_9048431_A_G 0.033832938
chr12_56487678_56487678_T_G NA
chr17_37881646_37881646_T_G NA
chr19_9002576_9002576_T_C 0.0342902
chr15_63991054_63991054_T_G 0.024456501
chr17_29554589_29554589_C_T 0.095445774
以前も同様の質問を投稿したことがあります。2つのファイルの最初の列に基づいて2つのタブで区切られたファイルを比較し、出力ファイルに一致するものと一致しないものを印刷します。
答え1
これは両方のファイルを解析する標準的な使い方ですawk
。最初のファイルの操作は条件の後に行われ、FNR==NR
値をハッシュ配列に保存します。このnext
文は、後続の操作を行わずに次の行に移動することを意味します。 2番目のファイルの場合は、次の部分を実行します。 3項を使用して保存された値がある場合は、インポートまたは「NA」に設定します。1
一人でprint
。column
スペースを含むタブ形状を取得するには、パイプを使用してください。
awk 'NR==FNR{a[$1]=$2; next} {$2=($1 in a)? a[$1]: "NA"} 1' fileB.txt fileA.txt \
| column -t
出力:
id freq.var
chr12_56487682_56487682_T_A 0.0035266
chr3_52436344_52436344_C_G 0.002500443
chr19_9091288_9091288_G_T NA
chr12_44172075_44172075_A_C 0.05739626
chr19_9048431_9048431_A_G 0.033832938
chr12_56487678_56487678_T_G NA
chr17_37881646_37881646_T_G NA
chr19_9002576_9002576_T_C 0.0342902
chr15_63991054_63991054_T_G 0.024456501
chr17_29554589_29554589_C_T 0.095445774