http://www.perlmonks.org?node_id=939269


in reply to Compare two files, nested while loops? Outer loop not iterating?

You are actually not looping over the inner file, as on the 1st iteration you read to the end of the file and dont reset to the begining, try adding a seek, something like:

#!/usr/bin/perl -w use strict; use warnings; my $num_args = $#ARGV + 1; if ($num_args != 3) { print "\nUsage: ./fastqkokku fasta quala outputfile\n"; exit; } my $fasta=$ARGV[0]; my $quala=$ARGV[1]; my $out=$ARGV[2]; open FA, "< $fasta"or die "Can't open $fasta: $!"; open QA, "< $quala" or die "Can't open $quala: $!"; open OUT,"> $out" or die "Can't open $out: $!"; while (my $line = <QA>){ chomp $line; my $nextline = <QA>; while (my $compline = <FA>) { if ($compline =~ m/$line/) { print OUT "$compline$nextline"; } } seek(FA,0,0); } close FA; close QA; close OUT;



This is not a Signature...
  • Comment on Re: Compare two files, nested while loops? Outer loop not iterating?
  • Download Code

Replies are listed 'Best First'.
Re^2: Compare two files, nested while loops? Outer loop not iterating?
by naturalsciences (Beadle) on Nov 21, 2011 at 17:50 UTC

    So in effect my original script would have a workflow like that > Iterate outer loop (QA lines)..first iteration.. along comes the inner loop (FA lines) > iterate wildly through it to the EOF, evaluating "if condition" if (hehe) it happens somewhere in the FA. Now should come the next iteration but FA is already read through, so no more lines from QA will ever be matched to anything.