BLAST コマンドを perl スクリプトに結合するときに行き詰まりました。問題は、PART II の開始時にコマンド ラインが一時停止することです。
パート I は、fasta シーケンスをトリミングするために使用されます。PART II は、PART I で生成されたファイルを使用して BLAST を実行するために使用されます。2 つの部分はどちらも個別に実行できますが、組み合わせると「一時停止」の問題が発生します。
パート I で生成された $ARGV[1] と $ARGV[3] がパート II で使用できないためだと思います。いろいろ試したのに直し方がわからない。
ありがとう!
#! /usr/bin/perl -w
use strict;
#### PART I
die "usage:4files fasta1 out1 fasta2 out2\n" unless @ARGV==4;
open (S, "$ARGV[0]") || die "cannot open FASTA file to read: $!";
open OUT,">$ARGV[1]" || die "no out\n";
open (S2, "$ARGV[2]") || die "cannot open FASTA file to read: $!";
open OUT2,">$ARGV[3]" || die "no out2\n";
my %s;# a hash of arrays, to hold each line of sequence
my %seq; #a hash to hold the AA sequences.
my $key;
print "how long is the N-terminal(give number,e.g. 30. whole length input \"0\") \n";
chomp(my $nl=<STDIN>);
##delete "\n" for seq.
local $/ = ">";
<S>;
while (<S>){ #Read the FASTA file.
chomp;
my @line=split/\n/;
print OUT ">",$line[0],"\n";
splice @line,0,1;
#print OUT join ("",@line),"\n";
#@line = join("",@line);
#print @line,"\n";
if ($nl == 0){ #whole length
my $seq=join("",@line);
my @amac = split(//,$seq);
splice @amac,0,1; # delete first "MM"
#push @{$s{$key}},@amac;
print OUT @amac,"\n";
}
else { # extract inital aa by number ##Guanhua
my $seq=join("",@line);
#print $seq,"\n";
my @amac = split(//,$seq);
splice @amac,0,1; # delete first "MM"
splice @amac,$nl; ##delete from the N to end
#print @amac,"\n";
#push (@{$s{$key}}, @amac);
print OUT @amac,"\n";
}
}
<S2>;
while (<S2>){ #Read the FASTA file.
chomp;
my @line=split/\n/;
print OUT2 ">",$line[0],"\n";
splice @line,0,1;
#print OUT join ("",@line),"\n";
#@line = join("",@line);
#print @line,"\n";
if ($nl == 0){ #whole length
my $seq=join("",@line);
my @amac = split(//,$seq);
splice @amac,0,1; # delete first "MM"
#push @{$s{$key}},@amac;
print OUT2 @amac,"\n";
}
else { # extract inital aa by number ##Guanhua
my $seq=join("",@line);
#print $seq,"\n";
my @amac = split(//,$seq);
splice @amac,0,1; # delete first "MM"
splice @amac,$nl; ##delete from the N to end
#print @amac,"\n";
#push (@{$s{$key}}, @amac);
print OUT2 @amac,"\n";
}
}
##### PART II
print "nucl or prot?\n";
chomp(my $tp = <STDIN>);
system ("makeblastdb -in $ARGV[1] -dbtype prot");
system ("makeblastdb -in $ARGV[3] -dbtype $tp");
print "blast type? (blastp,blastn)\n";
chomp(my $cmd = <STDIN>);
system ("blastp -query $ARGV[1] -db $ARGV[3] -outfmt 6 -evalue 1e-3 -out 12.out ");
system ("$cmd -db $ARGV[1] -query $ARGV[3] -outfmt 6 -evalue 1e-3 -out 21.out ");