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

Arrays 从数组中删除空白正则表达式命中,arrays,regex,perl,bioinformatics,fasta,Arrays,Regex,Perl,Bioinformatics,Fasta,我正在执行正则表达式搜索,希望只打印fasta格式的命中数据(两行数据:第一行以胡萝卜“>”开头,然后是命中,第二行没有胡萝卜,但仍然包含命中信息)。 我可以成功地生成一个输出multifasta文件,但是无论是否命中,输出文件中都包含胡萝卜和换行符 生成的输出: > > >TAGCTAGC TAGCTAGC > >GCTAGCTA GCTAGCTA >TAGCTAGC TAG

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

生成的输出:

    > 

    >

    >TAGCTAGC
    TAGCTAGC
    >

    >GCTAGCTA
    GCTAGCTA 
    >TAGCTAGC
    TAGCTAGC  
    >GCTAGCTA  
    GCTAGCTA
期望输出:

    > 

    >

    >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; 
#/usr/bin/perl
使用警告;
严格使用;
打开(CLUSTER,“>”,“SequencesToCluster.txt”)或die$!;
我的@TrimmedSequences;
my@ArrayofFiles=glob(“~/BLASTdb/Individual_Sequences_*”);
foreach my$文件(@ArrayofFiles){
打开(我的$序列,$文件)或死亡“无法打开文件:$!”;
而(我的$line=){
如果($line!~/^>/){
my$seq=$line;
$seq=~s/\R//g;
$seq=~m/([TAGC]{16})(CGGAGCTTTA | gccattct | taaagctcg | agaatgggc/;
推送(@TrimmedSequences,“>”,$1,“\n”,$1,“\n”);
} 
} 
} 
#在这里,我相信我需要操纵数组来摆脱空白的fastas
打印集群@TrimmedSequences;

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

例如

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

/^>?\s*$/

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

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

这将只有<代码>推< /代码>如果正则表达式匹配。

你可以检查“代码> > 1个/<代码>定义在你的内部while循环中,而不是首先推空行。你最后的代码> $SEQ=~/代码>似乎遗漏了一个代码> <代码>总是有一个第二双眼睛检查我的打字总是好的!对不起,打错了。接得好,太棒了。谢谢大家!@罗布,如果答案帮助你解决了问题,请接受答案。这将帮助具有相同问题的其他用户快速找到解决方案。