2016-05-25 5 views
2

私は正規表現検索を実行しています。ヒットのみをfasta形式(2行のデータ:ニンジン ">"の後にヒットし、2行目ニンジンなしで、まだヒット情報を含んでいる)。
出力マルチファスタファイルを正常に生成できますが、ヒットしたかどうかにかかわらず、ニンジンと改行は出力ファイルに含まれています。空白の正規表現ヒットを配列から削除する

生成される出力:

> 

    > 

    >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; 
+1

内側のwhileループで '$ 1'が定義されていることを確認して、最初に空行をプッシュしないでください。 –

+0

あなたの最後の '$ seq =〜'は1つの ')' –

+0

が見つからないようです。入力ミスを申し訳ありません。良いキャッチ。 – Rob

答えて

5

あなたは、配列をフィルタリングしている場合は、ツールがgrepです。

など。

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

これは空白だけの要素をフィルタリングします。それは空またはだけ>なので、あなたの場合:代わりに

/^>?\s*$/

しかし、それは最初に存在する必要のない問題を修正しています。あなたはそうすることができます:

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

これは、正規表現が一致する場合はpushとなります。

+0

ありがとうございました! – Rob

+0

@Rob、その答えが問題の解決に役立った場合は、その答えを受け入れてください。これにより、同じ問題を抱える他のユーザーがすぐに解決策を見つけるのに役立ちます。 – SilentMonk

関連する問題