2012-12-05 135 views
0

我有兩個文件input1.vcf.gz和input2.vcf.gz和輸出將是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並連接到基於coloumn 2號文件ASNE = 0.0034965匹配

的所有文件。廣州格式

回答

1

這裏就是我想你現在要做的,使用一個列和兩作爲關鍵字:

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。

相關問題