私はperlとプログラミング全般に非常に慣れていません。パターン一致の数を数える方法について、過去数日間検索してきました。他のソリューションを理解し、既に記述したコードに適用するのに苦労しました。
基本的に、シーケンスがあり、[TC]C[CT]GGAAGC に一致するすべてのパターンを見つける必要があります。
私はその部分がダウンしていると信じています。しかし、各パターンマッチの発生回数を数えることに固執しています。すでにこれを行う必要があるコードを編集する方法を知っている人はいますか? どんなアドバイスでも大歓迎です。ありがとう!
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
# open fasta file for reading
unless( open( FASTA, "<", '/scratch/Drosophila/dmel-all-chromosome- r6.02.fasta' )) {
die "Can't open dmel-all-chromosome-r6.02.fasta for reading:", $!;
}
#split the fasta record
local $/ = ">";
#scan through fasta file
while (<FASTA>) {
chomp;
if ( $_ =~ /^(.*?)$(.*)$/ms) {
my $header = $1;
my $seq = $2;
$seq =~ s/\R//g; # \R removes line breaks
while ( $seq =~ /([TC]C[CT]GGAAGC)/g) {
print $1, "\n";
}
}
}
更新、追加しました
my @matches = $seq =~ /([TC]C[CT]GGAAGC)/g;
print scalar @matches;
以下のコードで。ただし、すべてのパターン一致の合計を出力するのではなく、各パターン一致の前に 0 を出力しているようです。
while (<FASTA>) {
chomp;
if ( $_ =~ /^(.*?)$(.*)$/ms) {
my $header = $1;
my $seq = $2;
$seq =~ s/\R//g; # \R removes line breaks
while ( $seq =~ /([TC]C[CT]GGAAGC)/g) {
print $1, "\n";
my @matches = $seq =~ /([TC]C[CT]GGAAGC)/g;
print scalar @matches;
}
}
}
編集:見つかったパターンマッチを一覧表示する出力が必要です。見つかった一致の総数を見つけるためにも必要です。例えば:
CCTGGAAGC
TCTGGAAGC
TCCGGAAGC
3 件の一致が見つかりました