从数组中删除空白正则表达式命中
Remove blank regex hits from an array
我正在执行正则表达式搜索并希望仅打印出 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, ">", , "\n", , "\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, ">", , "\n", , "\n");
而且只有 push
如果正则表达式匹配。
我正在执行正则表达式搜索并希望仅打印出 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, ">", , "\n", , "\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, ">", , "\n", , "\n");
而且只有 push
如果正则表达式匹配。