0

列 1 と 2 に基づいて結合/マージしようとしている 2 つのファイルがあります。

入力1

22  42960000    rs149201999 A   AC  100 PASS    LDAF=0.0649;RSQ=0.8652;AN=2184;ERATE=0.0046;VT=SNP;AA=.;AVGPOST=0.9799;THETA=0.0149;SNPSOURCE=LOWCOV;AC=134;AF=0.06;ASN_AF=0.04;AMR_AF=0.05;AFR_AF=0.10;EUR_AF=0.06

入力2

22  42960000    .   A   AC  .   .    ;AA=1;AFE=0.989691;ASNE=1;EUN=0.992509;AFW=1;MED=0.991071;LAT=1

そして、出力は

22  42960000    .   A   AC  .   .    ;AA=1;AFE=0.989691;ASNE=1;EUN=0.992509;AFW=1;MED=0.991071;LAT=1;LDAF=0.0649;RSQ=0.8652;AN=2184;ERATE=0.0046;VT=SNP;AA=.;AVGPOST=0.9799;THETA=0.0149;SNPSOURCE=LOWCOV;AC=134;AF=0.06;ASN_AF=0.04;AMR_AF=0.05;AFR_AF=0.10;EUR_AF=0.06

各列はタブで区切られていることに注意してください。

4

2 に答える 2

0

を使用する 1 つの方法を次に示しGNU awkます。

awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' input1 input2

結果:

22  42960000    .   A   AC  .   .    ;AA=1;AFE=0.989691;ASNE=1;EUN=0.992509;AFW=1;MED=0.991071;LAT=1;LDAF=0.0649;RSQ=0.8652;AN=2184;ERATE=0.0046;VT=SNP;AA=.;AVGPOST=0.9799;THETA=0.0149;SNPSOURCE=LOWCOV;AC=134;AF=0.06;ASN_AF=0.04;AMR_AF=0.05;AFR_AF=0.10;EUR_AF=0.06
于 2012-10-29T13:15:55.490 に答える
0

これはうまくいくはずです:

s=%%%%%%
join -j1 -o1.1,1.2,1.3,1.4,1.5,1.6,1.7,2.7 <(sed "s/\t/$s/" input2) \
                                           <(sed "s/\t/$s/" input1) \
| sed "s/$s/\t/;
       s/\(=[^ ]*\) \([^ ]*=\)/\1;\2/;
       s/ \+/\t/g"
于 2012-10-29T12:39:09.780 に答える