2016-08-02 2 views
-2

Ich möchte Zeilen aus einer Datei erfassen, die enthalten: "ExprControl" oder "5p3pAssays" oder "Fusion".Filterzeilen aus Datei

Ich möchte jedoch Zeilen überspringen, die sowohl "Fusion" als auch "NoCall" enthalten. Wie kann ich diese Zeilen korrekt weglassen? Der folgende Code überspringt nicht Zeilen, die "Fusion" und "NoCall" enthalten. Vielen Dank.

... 
     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; 
... 

Antwort

2

& bedeutet nicht "und" in regulären Ausdrücken. Wer passt zu zweimal mit && statt:

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

Getestet gegen:

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

Sorry, ich hatte einen Tippfehler. Dein Ansatz funktioniert gut. – user3781528