in reply to Re^3: Reading two files, cmp certain cols
in thread Reading two files, cmp certain cols

Counting needs two steps: Setting the counter to 0 before the loop and the incrementing step:

#Initialize the counter before the loop my $true_positives=0; while(<INPUT2>){ ... #instead of the push $true_positives++;

That's it, $true_positives has the number of positive results after the loop

Replies are listed 'Best First'.
Re^5: Reading two files, cmp certain cols
by sesemin (Beadle) on Sep 20, 2008 at 20:36 UTC
    Hi Jethro,

    In the following loop, I am going to check if ($current_line14 >= 3) then I want to fake around $current_line2 plus/minus 8. Then check if

    $current_line[1] eq $key && $current_line[5] == 1 && $current_line [2] = $position1) {
    I did the following and again it is loop within a loop and makes it to print a lot of redundant stuff.

    I appreciate any help or solution.

    Pedro

    my $from = 0; my $to =0; my @range =(); while(<INPUT2>){ chomp; my @current_line = split /\t/; if (exists $file1{$current_line[1]} ) { my $key = $current_line[1]; foreach my $position1 (@{$file1{$key}}){ if ($current_line[14] >= 3){ $from = $current_line[2]-8; $to = $current_line[2]+8; for ($from .. $to){ push (@range, $_); } } foreach my $pos (@range){ if ($pos = $position1) { if ( $current_line[1] eq $key && $current_line[5] == 1 ) { print join ("\t", $current_line[1],$current_line[2],$current_line[5],$ +current_line[14], "***",$key, $position1), "\n"; $true_positives++; push (@{$file2{$current_line[1]}}, $current_line[5]); } } } } }

      "fake" is definitely the wrong word. So I can only guess what you want to do from your code. You seem to check if $position1 is between $current_line2-8 and $current_line2+8. In that case you have a bug in your code, in the line if ($pos = $position1) { the '=' should have been a '=='. Furthermore the loop isn't necessary, you only need two comparisions instead:

      # $from = $current_line[2]-8; # $to = $current_line[2]+8; # for ($from .. $to){ # push (@range, $_); # } # } # foreach my $pos (@range){ # if ($pos == $position1) { # substitute with if ($position1>=$current_line[2]-8 and $position1<=$current_line[2]+8) {