2016-08-02 4 views
-2

「ExprControl」または「5p3pAssays」または「Fusion」を含むファイルから線を取りたいと思います。ファイルからの線のフィルタリング

しかし、 "Fusion"と "NoCall"の両方を含む行をスキップしたいと思います。これらの行を正しく省略するにはどうすればよいですか?以下のコードでは、 "Fusion"と "NoCall"の両方を含む行をスキップすることはできません。ありがとうございました。

... 
     open my $in_fh, '<', $full_tsv_file 
     or die qq{Unable to open "$full_tsv_file" for input: $!}; 

     while (<$in_fh>) { 

      next if /^#/; 
      next if /\b(?:Fusion&NoCall)\b/; 
    next unless /\b(?:ExprControl|5p3pAssays|Fusion)\b/; 


      my @fields = split('\t'); 

      my $location = $fields[$location_col]; $location =~ s/"//g; 
... 

答えて

2

&は、正規表現で意味 "と" しません。代わりに&&で二回一致:

while (<>) { 
    next if /^#/ || /\bFusion\b/ && /\bNoCall\b/; 
    next unless /\b(?:Fusion|5p3pAssays|ExprControl)\b/; 
    print; 
} 

に対してテスト:

a ExprControl b 
c 5p3pAssays d 
e Fusion f NoCall g 
h NoCall i Fusion j 
k Fusion l 
+0

申し訳ありませんが、私はタイプミスがありました。あなたのアプローチはうまくいく。 – user3781528

関連する問題