非常抱歉在几个问题上打扰您,但我需要解决它...
我想从包含字符串的文件中提取几个子字符串,方法是使用另一个文件,其中包含我要提取的每个子字符串的开头和结尾。第一个文件是这样的:
>scaffold30 24194
CTTAGCAGCAGCAGCAGCAGTGACTGAAGGAACTGAGAAAAAGAGCGAGCTGAAAGGAAGCATAGCCATTTGGGAGTGCCAGAGAGTTGGGAGG GAGGGAGGGCAGAGATGGAAGAAGAAAGGCAGAAATACAGGGAGATTGAGGATCACCAGGGAG.........
.................
(字符串必须是文件中除第一行之外的所有内容),坐标文件如下:
44801988 44802104
44846151 44846312
45620133 45620274
45640443 45640543
45688249 45688358
45729531 45729658
45843362 45843490
46066894 46066996
46176337 46176464
.....................
我的脚本是这样的:
my $chrom = $ARGV[0];
my $coords_file = $ARGV[1];
#finds subsequences: fasta files
open INFILE1, $chrom or die "Could not open $chrom: $!";
my $count = 0;
while(<INFILE1>) {
if ($_ !~ m/^>/) {
local $/ = undef;
my $var = <INFILE1>;
open INFILE, $coords_file or die "Could not open $coords_file: $!";
my @cline = <INFILE>;
foreach my $cline (@cline) {
print "$cline\n";
my@data = split('\t', $cline);
my $start = $data[0];
my $end = $data[1];
my $offset = $end - $start;
$count++;
my $sub = substr ($var, $start, $offset);
print ">conserved $count\n";
print "$sub\n";
}
close INFILE;
}
}
当我运行它时,它看起来只进行了一次迭代,并打印了第一个文件的开头。似乎 foreach 循环不起作用。substr 似乎也不起作用。当我退出打印 cline 以检查循环时,它会打印带有坐标的文件的所有行。
如果我变得烦人我很抱歉,但我必须完成它,我有点绝望......
再次感谢你。