我有一个包含以下字符串的.fa文件:
NP_009339.1 NP_009339.1 glutamate dehydrogenase (NADP(+)) GDH3
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXX
XXBBBBBBBBBBBBBBBBBXXXXXBBBBBBBBBBBBBBBBBBBBBBBBBBBBBXXX XX
gi|10383797|ref|NP_009965.2| Rbk1p [Saccharomyces cerevisiae S288c]
AAAAAAAAAAAAAAAAAAAAAAAXXXXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXX
XBBBBBBBBBBBBBBBBBBBXX XXBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
[请注意,在第一个序列的第一行末尾,XXXXX拉伸由返回分隔,在第二行XXXXX由空格分隔,我也希望将它们计算在内。 任何人都可以帮我找到/打印此文件中存在的XXXXX段数,并在output.fa上打印整个序列。已经筋疲力尽了" chomp"忽略/空白。
这是我的剧本:
#!/usr/bin/perl
use warnings;
use strict;
open my $fh , '<' , 'input.fa' or die 'Cannot open file';
my $Count_XXXXX=0;
while (<$fh>){
chomp;
$Count_XXXXX+=s/X{5}//g;
}
close $fh;
print "\nTotal no of repeats:".$Count_XXXXX."\n";
答案 0 :(得分:1)
最简单的方法就是删除空格,如果这就是你想要的。以下以段落模式输入您的序列,然后处理$ data:
use strict;
use warnings;
local $/ = "\n\n";
while (<DATA>) {
chomp;
my ($label, $data) = split "\n", $_, 2;
$data =~ s/\s+//g;
my $count = () = $data =~ m/X{5,}/g;
print "$count\n";
}
__DATA__
NP_009339.1 NP_009339.1 glutamate dehydrogenase (NADP(+)) GDH3
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXX
XXBBBBBBBBBBBBBBBBBXXXXXBBBBBBBBBBBBBBBBBBBBBBBBBBBBBXXX XX
gi|10383797|ref|NP_009965.2| Rbk1p [Saccharomyces cerevisiae S288c]
AAAAAAAAAAAAAAAAAAAAAAAXXXXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXX
XBBBBBBBBBBBBBBBBBBBXX XXBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
输出:
3
0
<强>更新强>
要捕获所有匹配项,只需将正则表达式的结果分配给数组:
my $count = my @matches = $data =~ m/X{5,}/g;
注意,我故意让匹配拉5或更多X,因为我假设连续10 X应该算作单个匹配而不是2个匹配。