0

input1.vcf.gz と input2.vcf.gz の 2 つのファイルがあり、出力は output.vcf.gz になります。

input1.vcf.gz

X   60060   2   572 G:1 C:0
X   60070   2   572 G:0.996503  T:0.0034965

input2.vcf.gz

X   60060   .   G   C   .   .    ;AA=0.131148;AFE=0.154639;EUN=0;AFW=0.181818;MED=0.00446429;LAT=0.0165746;VT=SNP;AF=0.04
X   60070   .   G   T   .   .    ;AA=0;AFE=0;EUN=0;AFW=0;MED=0;LAT=0;AF=0.0009;VT=SNP

output.vcf.gz

X   60060   .   G   C   .   .    ;AA=0.131148;AFE=0.154639;EUN=0;AFW=0.181818;MED=0.00446429;LAT=0.0165746;VT=SNP;AF=0.04;ASNE=0

    60070   .   G   T   .   .    ;AA=0;AFE=0;EUN=0;AFW=0;MED=0;LAT=0;AF=0.0009;VT=SNP;ASNE=0.0034965

ここで ASNE=0 および ASNE=0.0034965 は、列の一致に基づいて 2 番目のファイルに添付されます

すべてのファイルは .gz 形式です

4

1 に答える 1

1

列1と2をキーとして使用して、あなたがやろうとしていることは次のとおりです。

awk 'FNR==NR { split($NF,a,":"); b[$1,$2]=a[2]; next } ($1,$2) in b { print $0 ";ASNE=" b[$1,$2] }' input1.vcf input2.vcf

結果:

X   60060   .   G   C   .   .    ;AA=0.131148;AFE=0.154639;EUN=0;AFW=0.181818;MED=0.00446429;LAT=0.0165746;VT=SNP;AF=0.04;ASNE=0
X   60070   .   G   T   .   .    ;AA=0;AFE=0;EUN=0;AFW=0;MED=0;LAT=0;AF=0.0009;VT=SNP;ASNE=0.0034965

したがって、圧縮ファイルの場合は、次を試してください。

awk 'FNR==NR { split($NF,a,":"); b[$1,$2]=a[2]; next } ($1,$2) in b { print $0 ";ASNE=" b[$1,$2] }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz) | gzip > output.vcf.gz

それがどうなるか教えてください。HTH。

于 2012-12-05T10:33:33.603 に答える