我对 Perl 和脚本非常陌生,但我需要一个代码来进行我的研究。我正在尝试计算存储在 multiFASTA 文件中的 DNA 序列中 11-mers 的频率。通过合并我找到的一些脚本,我写了这个:
#!/usr/bin/perl
$k = 11; @bases = ('A','C','G','T');
@words = @bases; open FILE1, ">kmers.txt" or die $!;
for $i (1..$k-1) {
undef @newwords;
foreach $w (@words)
{
foreach $b (@bases)
{
push (@newwords,$w.$b);
}
}
undef @words;
@words = @newwords;
}
foreach $w (@words) {
print FILE1 "$w \n";
}
close FILE1;
my $input=$ARGV[0];
my $output=$ARGV[1];
open(IN,"<$input") || die ("Error opening $input $!");
open OUT, ">$output" or die $|; my $line = <IN>;
print OUT $line;
while ($line = <IN>) {
chomp $line;
if ($line=~m/^>/) {
print OUT "\n",$line,"\n";
} else {
print OUT $line;
}
}
print OUT "\n";
chomp $seq; chomp $k;
#obtain all distinct kmers open FILE2, ">out.txt" or die $!;
for $line (@lines) {
if ($line=~m/^>/) { next; }
}
foreach($i=1; length($line) >= $k; $i++) {
$line =~ m/(^.{$k})/;
$w{$1}{cnt}++;
push @{$w{$1}{pos}}, $i;
$line= substr($seq, 1, length($line)-1);
foreach $line (keys %kmers) {
print FILE2 "$kmers\n";
}
close FILE2;
close OUT;
}
基本上,它读取文件,将所有序列行放在单独文件的一行中,记下所有 11mers 并创建一个“out.txt”文件,我希望他在其中存储具有 11-mer 频率的序列头。这是困难的部分(对我来说):我如何告诉脚本编写序列标题以及每个序列的 11mer 频率?