【问题标题】:count the number of repeats of a set of characters计算一组字符的重复次数
【发布时间】:2014-04-09 00:52:16
【问题描述】:

我有一个包含以下字符串的 .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 拉伸由 return 分隔,第二行 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";

【问题讨论】:

    标签: perl


    【解决方案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 个匹配。

    【讨论】:

    • 非常感谢!是否有可能提取包含这组字符(XXXXX)的整个序列。
    • 是的,我已经包含了一个用于保存所有捕获的匹配项的更新。
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 2019-12-09
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多