2014-04-07 26 views
0

我有以下串的.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"; 

回答

1

最簡單的方法是隻去掉空格如果這就是你想要的。在段落模式下輸入你的序列,然後處理$數據:

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個比賽。

+0

非常感謝!是否有可能提取其中包含這組字符的整個序列(XXXXX)。 – user3489854

+0

是的,我已經包含了保存所有捕獲的匹配的更新。 – Miller

+1

這真的很有幫助。 – user3489854