#!/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.uibnd4h.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;