2つのタブで区切られたファイル(fileA.txtとfileB.txt)があり、fileA.txtの最初の列をfileB.txtの最初の列と比較する必要があり、2番目の列の内容を印刷しようとしています。出力ファイルfileB.txt。以下は私です。
fileA.txt
id
chr1_45796849_A_T
chr1_45796854_C_T
chr1_45797174_T_A
chr1_45796852_G_C
chr19_9018540_A_G
chr19_9002576_T_C
chr1_45797487_A_G
chr1_45797153_A_T
chr1_45797750_C_T
FileB.txt
chr_pos freq.var
chr1_45796849_A_T 0.028399811
chr1_45796852_G_C 0.019154034
chr1_45796854_C_T 0.015872901
chr1_45797153_A_T 0.010129176
chr1_45797487_A_G 0.012981216
chr1_45797750_C_T 0.024949931
以下は予想される結果です
id freq.var
chr1_45796849_A_T 0.028399811
chr1_45796854_C_T 0.015872901
chr1_45797174_T_A
chr1_45796852_G_C 0.019154034
chr19_9018540_A_G
chr19_9002576_T_C
chr1_45797487_A_G 0.012981216
chr1_45797153_A_T 0.010129176
chr1_45797750_C_T 0.024949931
私はすでに言及しましたawk - 2つのファイルの2つの列を比較し、共通の行を印刷します。ただし、一致するもののみを提供します。
ベストアンサー1
最初に読み、fileB.txt
最初のフィールドをキーにし、2番目のフィールドを配列の値にしFNR>1
(を使用してヘッダー行をスキップします)。NRとFNRとは何ですか? "NR==FNR" とはどういう意味ですか?)。
次に、を読み、fileA.txt
最初の行のヘッダー、最初のフィールド、配列の対応する要素(存在する場合)を印刷します。
awk '
FNR==NR && FNR>1{a[$1]=$2}
NR!=FNR{
if(FNR>1){print $1,a[$1]}
else{print "id", "freq.var"}
}
' OFS="\t" fileB.txt fileA.txt
OFS="\t"
出力フィールド区切り記号をタブに設定します。ファイルはタブで区切られているため、出力ファイルもタブで区切る必要があるとします。
整列のためにパイプで接続できますcolumn -t
。