1

Linuxコマンドを使用して2つの入力ファイルからファイルを作成する必要があります

入力 1:

21 33210001 rs60180678 G T 100 PASS AVGPOST=1.0000;RSQ=0.9885;THETA=0.0002;AA=G;AN=2184;VT=SNP;LDAF=0.0019;SNPSOURCE=LOWCOV;AC=4;ERATE=0.0003;AF=0.0018;AFR_AF=0.01 GT:DS:GL

入力 2:

21 33210001 . G T . . ;AA=0.0163934;AFE=0;ASNE=0;EUN=0;AFW=0.0113636;MED=0;LAT=0;VT=SNP;AF=0.0018

期待される出力:

21 33210001 rs60180678 G T . . ;AA=0.0163934;AFE=0;ASNE=0;EUN=0;AFW=0.0113636;MED=0;LAT=0;VT=SNP;AF=0.0018

各列はタブ スペースで区切られます。

1 列目、2 列目、4 列目、5 列目の一致に基づいて出力を作成します

out ファイルの各列は、タブ スペースで区切られています。

4

2 に答える 2

2

これが 1 つの方法awkです。

awk 'BEGIN { FS=OFS="\t" } FNR==NR { a[$1,$2,$4,$5]=$3; next } ($1,$2,$4,$5) in a { $3=a[$1,$2,$4,$5] }1' file1 file2

結果:

21 33210001 rs60180678 G T . . ;AA=0.0163934;AFE=0;ASNE=0;EUN=0;AFW=0.0113636;MED=0;LAT=0;VT=SNP;AF=0.0018
于 2012-11-28T06:06:09.643 に答える
0

別の解決策:

awk 'BEGIN{FS=OFS="\t"}{getline a < "file2"; split(a,b,"\t");print $1,$2,$3,$4,$5,b[6],b[7],b[8]}' file1
于 2012-11-28T11:55:29.167 に答える