in reply to Re^2: Print hash keys and lookup the keys for values in another file -- oneliner and more explained
in thread Print hash keys and lookup the keys for values in another filr
Use a hash rather than 2 loops. Format the output with printf
poj#/usr/bin/perl use warnings; use strict; use Data::Dumper; my $search = 'Wood'; my %file01 = (); my $inFile01 = "FILE01.dat"; open DATA01,'<',$inFile01 or die "Can't open file '$inFile01' : $!"; while (<DATA01>) { chomp; # Skipping if the line is empty or a comment next if ( $_ =~ /^\s*$/ ); next if ( $_ =~ /^#\s*/ ); my ($county,$var,$stcode) = split ";",$_; if ($var eq $search) { $file01{$county} = 1; } } close DATA01; print Dumper \%file01; my %result = (); my $inFile02 = "FILE02.dat"; open DATA02,'<',$inFile02 or die "Can't open file '$inFile02' : $!"; while (<DATA02>) { chomp; # Skipping if the line is empty or a comment next if ( $_ =~ /^\s*$/ ); next if ( $_ =~ /^#\s*/ ); my ($code,$attr,$county) = split ";",$_; if ( exists $file01{$county} ) { push @{ $result{$county} },$code } } close DATA02; print Dumper \%result; my $fmt_1 = "L|A|%d|%d|||||||||||||||||||||||\n"; my $fmt_2 = "M|A|%d||||%s|%s|CONSTANT_STRING\n"; foreach my $county (keys %result) { for my $id ( sort @{$result{$county}} ){ printf $fmt_1,$id,$id; printf $fmt_2,$id,$search,$search; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Print hash keys and lookup the keys for values in another file -- oneliner and more explained
by Magnolia25 (Sexton) on Feb 12, 2017 at 15:09 UTC |