私は Perl とスクリプト作成に非常に慣れていませんが、研究用のコードが必要です。multiFASTA ファイルに保存されている DNA 配列の 11-mer の頻度を計算しようとしています。私が見つけたいくつかのスクリプトを一緒にマージすることによって、私はこれを書きました:
#!/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;
}
基本的に、それはファイルを読み取り、すべてのシーケンス行を別のファイルに 1 行に配置し、すべての 11mer を書き留めて「out.txt」ファイルを作成します。このファイルには、11mer 頻度のシーケンス ヘッダーを保存してもらいます。ここが (私にとって) 難しい部分です: 各シーケンスの 11mer 頻度と共にシーケンス ヘッダーを書き込むようにスクリプトに指示するにはどうすればよいでしょうか?