- 論壇徽章:
- 0
|
open(FILE1, "<Test.fasta") || die("Cannot open file Test.fasta");
open(FILE2, "<Repeat.gff") || die("Cannot open file Repeat.gff");
open(OUTFILE, ">Test3.txt") || die("Cannot create file Test3.txt");
my %hash;
while(<FILE1>) {
chomp;
if(/^>/){
$key=substr($_,1);
}
else {
$hash{$key}.=$_;
}
}
while(<FILE2>){
chomp;
s/^\s+//g;
my @temp=split(/\t|\;/,$_);
my $ID=$temp[0]; # my $ID=substr($temp[0],0);
my $Start=$temp[3]-1;
my $Len=($temp[4]-$temp[3]+1);
while(my($key, $value)=each%hash){
if(exists $hash{$ID}) {
$hash{$ID} =~ s/^(.{$Start})(.{$Len})/$1.lc($2)/eg;
}
}
}
foreach my $k (keys %hash) {print OUTFILE "$k\t$hash{$k}";}
close FILE1;
close FILE2;
close OUTFILE;
這段腳本的執(zhí)行結(jié)果是:Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.{ <-- HERE 32926})(.{195})/ at t41.pl line 27, <FILE2> line 60.
已知:GFF文件記錄的是每個(gè)ID不同區(qū)段的序列特征信息,每個(gè)ID縱列出現(xiàn)若干次; fasta文件記錄的是>ID\n 序列;
問題:首先讀取序列fasta文件,存入hash數(shù)列,key指定為:“>”后面的字符串,以便于對應(yīng)下面的GFF文件中的第一列$ID,便于在其中查找。$Start是要替換序列的起點(diǎn),$Len是要替換序列從$Start開始的長度。$ID 是序列的ID, 對每一個(gè)ID,查找是否存在于fasta文件中,有對話,對其相應(yīng)的序列坐標(biāo)片段進(jìn)行小寫替換。然后輸出結(jié)果。
本人剛剛開始寫perl腳本,請問大神,我那里寫錯(cuò)了????為什么運(yùn)行報(bào)錯(cuò),說正則表達(dá)式匹配超出范圍,我查找了相應(yīng)到Line27的序列,確認(rèn)沒有錯(cuò)誤。SOS~~~~~ |
|