arrays - 从数组中删除空白正则表达式命中

标签 arrays regex perl bioinformatics fasta

我正在执行正则表达式搜索,并希望仅打印 fasta 格式的命中(两行数据:第一行以胡萝卜“>”开头,后跟命中,第二行没有胡萝卜,但仍包含命中信息)。
我可以成功生成输出 multifasta 文件,但无论是否命中,胡萝卜和换行符都会包含在输出文件中。

生成的输出:

    > 

    >

    >TAGCTAGC
    TAGCTAGC
    >

    >GCTAGCTA
    GCTAGCTA 

期望的输出:

    >TAGCTAGC
    TAGCTAGC  
    >GCTAGCTA  
    GCTAGCTA

这是我的代码:

    #!/usr/bin/perl 
    use warnings; 
    use strict; 

    open(CLUSTER, ">", "SequencesToCluster.txt") or die $!; 

    my @TrimmedSequences; 

    my @ArrayofFiles = glob ("~/BLASTdb/Individual_Sequences_*"); 

    foreach my $file (@ArrayofFiles){ 
        open (my $sequence, $file) or die "can't open file: $!"; 
        while (my $line = <$sequence>){ 
            if ($line !~/^>/){ 
            my $seq = $line; 
            $seq =~ s/\R//g; 
            $seq =~ m/([TAGC]{16})(CGGAGCTTTA|GCCATTTCT|TAAAGCTCCG|AGAAATGGGC/; 
            push(@TrimmedSequences, ">", $1, "\n", $1, "\n");  
            } 
       } 
    } 
    #Here I believe I need to manipulate the array to get rid of blank fastas
    print CLUSTER @TrimmedSequences; 

最佳答案

如果您要过滤数组,则该工具是grep

例如

my @new_array = grep { not /^\s*$/ } @old_array;

这将过滤任何只是空白的元素。在您的情况下,因为它是空的只是一个>:

/^>?\s*$/ 代替。

但是,这解决了一个本来并不存在的问题。您可以改为:

$seq =~ m/([TAGC]{16})(CGGAGCTTTA|GCCATTTCT|TAAAGCTCCG|AGAAATGGGC)/ 
       && push(@TrimmedSequences, ">", $1, "\n", $1, "\n");  

只有当正则表达式匹配时才会推送

关于arrays - 从数组中删除空白正则表达式命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441857/

相关文章:

c - 在 C 中扩展动态 char** 数组时 realloc() 失败

php - 基于种子的改组数组以获得始终相同的结果?

regex - 使用终端 man 命令阅读手册页中的部分

perl - 如何以相反的字节顺序打印变量?

perl - Spreadsheet::Read 的问题

javascript - 在knockoutJS中绑定(bind)到可观察数组的问题

php - 从 PHP 中的字符串中删除控制字符

java - 用于拆分电话号码的正则表达式

perl - wget 与 Perl 的 lwp 有何不同?

c++ - QT中数组指针对象的指针