gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:20:02 25 4
gpt4 key购买 nike

我正在执行正则表达式搜索,并希望仅打印 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com