我对 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 个匹配项