6.7 perl--blast后的xml注释结果提取

用本地化的blast比对,outfmt为5时,出来的结果为xml格式,里面包含了非常全面的注释信息,我需要对注释结果中最好的那条比对结果进行提取。

分析:

这样的一个脚本,主要就是一个捕获的过程中,我们知道没一条query都会有很多条比对的结果,而我们需要的是每条序列比对的第一个结果(也就是最好的),这个脚本的难点找到不同的识别位点。 我下面的这个脚本写的优点粗糙,因为第个最好的比对结果是跟在Iteration_query-def后面的,而一条序列就只有一个Iteration_query-def,所以识别出来他,然后在后面识别其他比对的结果输出结果后面加上\n(换行符)就提取出来结果。这样最好的比对的那个结果后面就加上了query:,没有query:的行就不是最好的结果。

然后再终端 gerp “query:” outputfile outpufile.

#!/usr/bin/perl
use warnings;
use strict;
my$usage="distrub.pl blast.xml ouput";
die $usage if @ARGV!=2;
my ($input,$output)=@ARGV;


open IN,'<',$input;
open OUT,'>',$output;

print OUT "num\tquery\thit\tannoation\n";

my $num=0;

while () {
   chomp;
          print OUT "query:$1\t" if (/(\S+)<\/Iteration_query-def>/);
          print OUT "$1\t" if(/(\S+?)<\/Hit_id>/);
          print OUT "$1\n" if(/(.*?)<\/Hit_def>/);  

}

close IN;
close OUT;

注:

第一次写这种捕获,我觉得难点就是要找到可靠的识别位点,但是我这个脚本写的不好,因为不能一次性处理,得到我想要的结果,在写的过程中If语句还是有点用的不好。

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学