in reply to parsing mismatch from blast output

I couldn't find any files of the correct format. I tried blastn at NCBI on NC_000009.11, but after waiting 45 minutes it said: "Informational Message: blastsrv4.REAL: Error: CPU usage limit was exceeded, resulting in SIGXCPU (24)." which probably just goes to show I don't know what the .... I'm doing.

So I based this upon your sample:

#! perl -slw use strict; my( $ID, $query, $off ); while( <DATA> ) { if( m[^>] ) { ( $ID ) = (split '\|', $_)[ 1 ]; next; } if( m[^Query] ) { ( $query ) = m[^Query\s+(\d+)]; my $top = substr $_, 15; my $pipes = substr <DATA>, 15; my $bot = substr <DATA>, 15; my $p = 0; while( $p = 1+index $pipes, ' ', $p ) { printf "%20s :(%d) %1s/%1s\n", $ID, $query+$p, substr( $top, $p-1, 1 ), substr( $bot, $p-1, 1 ); } } } __DATA__

Outputs:

c:\test\blast>..\853819.pl 14079 ref :(75) A/C 14080 ref :(15) A/A 14080 ref :(90) T/T 14080 ref :(124) G/G 14080 ref :(129) C/C 14080 ref :(136) A/A 14081 ref :(75) A/C

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^2: parsing mismatch from blast output
by Anonymous Monk on Aug 11, 2010 at 09:34 UTC
    HI Thanks for that! Insted of getting the position in reference to Query, I qould like to have them in reference to Subject. So, the output should be something like this. 14079 ref 487239 A/C. my tweaks other than your suggestions are here
    #!/usr/local/bin/perl -sl # use strict; use Getopt::Long; my $home = $ENV{'HOME'}; my($ID, $query, $off, $idi, $subject); print "ID\tposition\tvariation\n"; while(<DATA>) { next if $. <20; if(m[^>]) { ($ID) = (split '\|',$_)[1]; #!/usr/local/bin/perl -sl # use strict; use Getopt::Long; my $home = $ENV{'HOME'}; my($ID, $query, $off, $idi, $subject); print "ID\tposition\tvariation\n"; while(<DATA>) { next if $. <20; if(m[^>]) { ($ID) = (split '\|',$_)[1]; } if(/^\s+Identities/){ my($identity, undef) = split/,/ ; ($idi) = $identity =~ /\sIdentities\s\=\s\d{3}\/\d{3}\s\((\d{2,3}\% +)\)$/; } if($idi eq "95%") { if(m/^Query/) { ($query) = m[^Query\s+(\d+)]; my $top = substr $_, 15; my $pipes = substr <DATA>,15; my $bot = substr <DATA>, 15; my $p = 0 ; while ($p = 1+index $pipes,' ', $p) { printf "%20s\t%d\t%1s/%1s\n",$ID,$query+$p, substr( $top, $p-1, 1 +),substr( $bot, $p-1, 1 ); } } } } } if(/^\s+Identities/){ my($identity, undef) = split/,/ ; ($idi) = $identity =~ /\sIdentities\s\=\s\d{3}\/\d{3}\s\((\d{2,3}\% +)\)$/; } if($idi eq "95%") { if(m/^Query/) { ($query) = m[^Query\s+(\d+)]; my $top = substr $_, 15; my $pipes = substr <DATA>,15; my $bot = substr <DATA>, 15; my $p = 0 ; while ($p = 1+index $pipes,' ', $p) { printf "%20s\t%d\t%1s/%1s\n",$ID,$query+$p, substr( $top, $p-1, 1 +),substr( $bot, $p-1, 1 ); } } } }
    Thanks.
      OH Yes, I managed find a way through it thanks for al wonderful suggestions.