Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have two files ptt.txt and mapped.txt :
ptt.txt Location Strand Length PID Gene Synonym Code COG + Product 1..1524 + 5 +07 15607143 dnaA Rv0001 - COG0 +593L chromosomal replication initiato +r protein DnaA 2052..3260 + 402 15607144 dnaN Rv0002 - COG0592L + DNA + polymerase III subunit beta 3280..4437 + 385 15607145 recF Rv0003 - +COG1195L + DNA replication/repair protein RecF
mapped.txt gi|50953765|ref|NC_002755.2|-587160 83 gi|448814763|ref|NC_00096 +2.3| + 1329307
my code is
$file="mapped.txt"; open (FH1, "$file"); open (FA, ">>allassignment.txt"); while ($seq1=<FH1>) { @seq1=split (/\t/, $seq1); $pos1=@seq1[3]; open (FH, "ptt.txt"); while ($seq=<FH>) { @seq=split (/\t/, $seq); $pos=@seq[0]; $pos8=@seq[8]; chomp $pos8; @pos=split(/\.\./, $pos); $pos_start=@pos[0]; $pos_end=@pos[1]; for ($i=$pos_start, $i<=$pos_end, $i++) {if ($i=~m/^$pos1$/) {$position1=@seq1[0]; $position8=@seq1[8]; $position9=@seq1[9]; print FA $i."\t".$pos1."\t".$pos."\t".$pos8."\t".$pos1."\t".$position1 +."\t".$position8."\t".$position9."\n" ; last;} } }}}
I want to find out if the third column of mapped.txt lies within the range of first column of ptt.txt

Replies are listed 'Best First'.
Re: compare third column of one file with the first column of another
by soonix (Chancellor) on May 06, 2016 at 09:24 UTC
    First you should explain what comprises a "column". In your script, you split both files on /\t/ (a tab), so your ptt.txt (which is one single line, btw.) probably has the word "Location" as first column, and the third column of mapped.txt is the string "gi|448814763|ref|NC_00096".

    Most probably that is not what you want.

Re: compare third column of one file with the first column of another
by pme (Monsignor) on May 06, 2016 at 09:20 UTC
    Hi AM,

    this little piece of code might help.

    use strict; use warnings; open my $m, '<', 'mapped.txt' or die 'Cannot open mapped.txt'; while (<$m>) { chomp; my @l = split /\|/; open my $p, '<', 'ptt.txt' or die 'Cannot open ptt.txt'; while (<$p>) { next if /^Location/; chomp; my ($range) = split; my ($fm, $to) = split(/\.\./, $range); if ($l[1] >= $fm and $l[1] <= $to) { # here you can set which +column is used to compare print "$l[1] - $_\n"; } } close $p; } close $m;
Re: compare third column of one file with the first column of another
by Corion (Patriarch) on May 06, 2016 at 09:06 UTC

    Where exactly is your problem? Do you have problems getting at the third column? Or do you have problems getting at the first column? Do you have problems doing the comparison?