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
poj#!/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;
|
|---|
| 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 | |
by huck (Prior) on Jul 13, 2017 at 08:15 UTC | |
by soonix (Chancellor) on Jul 13, 2017 at 09:39 UTC |