Hi e9292,
I rewrote your code without changing it too much so that it (a) works as specified and (b) gets rid of lots of unnecessary cruft, (c) primarily your use of use vars (deprecated) and global variables (discouraged).
However please note that you appear to be working with CSV-format files (tab-delimited), and so you would be much safer to read them in with a CSV-parsing module such as Text::CSV_XS which can handle empty fields, blank lines, special characters inside fields, etc.
Also, if you have 500,000 entries, I would suggest storing the output data in a simple RDBMS such as SQLite. This will make working with the data much easier after you collate it.
#!/usr/bin/perl use warnings; use strict; use autodie; my %whole_pedigree; open( my $in, '<', 'wholepedigree_F.txt'); while ( my $line = <$in> ) { chomp $line; my ( $ID, $sire, $dam, $F, $FB, $AHC, $FA ) = split ( /\s+/, $line + ); if ( $ID ) { $whole_pedigree{ $ID } = "$F\t$AHC"; } } close $in; open( my $look_for, '<', 'damF.txt' ); open( my $output, '>', 'output.txt' ); while ( my $line = <$look_for> ) { chomp $line; my ( $damID, $damF, $damAHC, $prog ) = split (/\s+/, $line); if ( $prog && $whole_pedigree{ $prog } ) { print $output join( "\t", $prog, $whole_pedigree{ $prog }, "$ +damID\t$damF\t$damAHC" ), "\n"; } } close $look_for; close $output; print "Done\n";
cat output.txt
3162 0 0 501093 0 0 3163 0 0 2958 0 0 3164 0 0 1895 0 0 3165 0 0 1382 0 0 3166 0 0 2869 0 0
Hope this helps!
In reply to Re: Trouble iterating through a hash
by 1nickt
in thread Trouble iterating through a hash
by e9292
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |