in reply to Re: Filter out an input file with a given waiver file, and output to a specific file
in thread Filter out an input file with a given waiver file, and output to a specific file

No need to loop through the hash keys to find a match

foreach my $okey (keys %identifier) {
   foreach my $skey (keys %{$identifier{$okey}}) {
     if (exists $identifier{$okey}) {

Try

#!/tools/perl/5.8.8/linux/bin/perl use strict; use warnings; use Data::Dumper; my $report ="/ice_pnr/pnr19/nadder/lzhong/uibnd4h/lzhong.i14socnd.uibn +d4h.44/uibnd4h/r2g2/blocks/INTEL14.P1273.6/uibnd4h_bot_sta/40_finish/ +tmp/trans10/max_trans_summary.list"; my $waiver = "/home/leeyong1/waiver.csv"; my $result = "/home/leeyong1/output.file"; print "script -report ($report) -waiver ($waiver) -output ($result)\n" +; # Read the violations file into the hash #klmn124,100.00,2500.00,"justifiedbyChan","Date:14/4" my %identifier = (); open my $filter, '<', $waiver or die "$!"; while (my $vline = <$filter>) { next unless $vline =~ /\S/; # skip blank lines my ($pin, $t1, $t2, @note) = split /,/, $vline; $identifier{$pin}{'t1'} = $t1; $identifier{$pin}{'t2'} = $t2; } print Dumper \%identifier; #Read input file line by line open my $input, '<', $report or die "$!"; open my $output, '>', $result or die "$!"; #abcd123 klmn123 100.00 1000.00 -900.00 (VIOLATED) while (my $wline = <$input>){ my ($scenario, $pin, $t1, $t2, $diff, $status) = split /\s+/, $wline +; # overwrite values if match if (exists $identifier{$pin}) { $t1 = $identifier{$pin}{'t1'}; $t2 = $identifier{$pin}{'t2'}; $diff = sprintf "%.2f",$t1-$t2; $status = '(WAIVED)'; } print $output "$scenario $pin $t1 $t2 $diff $status\n"; } close $filter; close $input; close $output;
poj
  • Comment on Re^2: Filter out an input file with a given waiver file, and output to a specific file
  • Download Code

Replies are listed 'Best First'.
Re^3: Filter out an input file with a given waiver file, and output to a specific file
by DespacitoPerl (Acolyte) on Jul 13, 2017 at 08:01 UTC
    in this line and loop, Global symbol "$pins2" requires explicit package name, for both $pin and $identifier

    Update:

    if (exists $identifier{$pin}) {

    in this line and loop, Global symbol "$pin" requires explicit package name, for both $pin and $identifier

    2017-07-15 Athanasius restored original content

      Gee that's funny, i dont see $pins2 anywhere in that code. And trying to run it produces no messages to that effect

      You must have done something really wrong, what was it?

      Maybe you could first take the time to compare what you have to what poj wrote for you

      Did you copy-and-paste the program, or did you retype?
      I usually get this kind of message, when I accidentally forget semicolons and Perl then sees the "if" as a statement modifier.