【问题标题】:Perl how to find motifs in a multi fasta filePerl如何在多fasta文件中查找主题
【发布时间】:2019-06-14 07:42:04
【问题描述】:

给定一个名为 file.txt 的多 fasta 文件:

>seq1  
CCTTTGGATGGCAAAATTTNTNGTAAA
AGGGCACCCANTTCTGGC  
>seq2
NNNNNGGGGCGTAANGAGGGGCACGG
TNCC
>seq3   
AAAAAANNNNTAC

我想找到与图案匹配的图案
[NC].[CT](元素 N 或 C 后跟任何元素 . 后跟元素 C 或 T)

[AT][AN]..[CG](元素 A 或 T 后接元素 A 或 N 后接任意两个元素 .. 后接元素 C 或 G)
对于以符号“>”开头的每个序列,并计算有多少序列包含该主题。我在这段代码中遇到的主要问题是每个序列的迭代。这是我的代码:

#!/usr/bin/perl -w

use warnings;

if(!open(MY_HANDLE, "file.txt")){
    die "Cannot open the file";
}
 @content = <MY_HANDLE>;
close(MY_HANDLE);
foreach $row(@content){
  chomp($row);
     if (@matches1=$row =~ /([AT][AN]..[CG]+)/g)  {
     $numMat=scalar(@matches1);
     print("@matches1,$numMat\n");
     }
     elsif (@matches2=$row =~ /[NC].[CT]+/g)  {
     print("@matches2\n");
     }
  }

非常感谢

【问题讨论】:

    标签: perl sequence


    【解决方案1】:
    #!/usr/bin/perl
    use warnings;
    use strict;
    use feature qw{ say };
    
    sub output {
        my ($id, $seq) = @_;
        my $count = () = $seq =~ /(?=[NC].[CT]|[AT][AN]..[CG])/g;
        say "$id\t$count" if $count;
    }
    
    my ($id, $seq);
    while (<>) {
        chomp;
        if (/^>(\S*)/) {
            output($id, $seq) if defined $id;
            $id = $1;
            $seq = "";
        } else {
            $seq .= $_;
        }
    }
    output($id, $seq);
    

    逐行处理文件。当您遇到序列头时,请记住 id,否则将序列连接到其前一部分 - 模式可以匹配行边界!

    output 在最后被再次调用,否则最后一个序列将不会被处理。

    我使用前瞻 (?=...) 进行匹配,因为模式可以重叠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-23
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多