#!/usr/bin/perl
use say;
use strict;
use warnings;
use Data::Dumper;
my @keys_input_file =
('scenario', 'pins', 'threshold-1', 'threshold-2', 'subtraction', 'notation');
my @keys_filter_file =
('pins', 'threshold-1', 'threshold-2', 'justification', 'date');
my %HoH_Input;
my %HoH_Filter;
# reset line numbering on each input file
while (<>) {
chomp;
next if /^\s*$/; # skip empty lines
my @values;
if (/,/) {
@values = split /,/, $_;
@{$HoH_Filter{$ARGV}{$.}}{@keys_filter_file} = @values;
}
else {
@values = split /\s+/, $_;
@{$HoH_Input{$ARGV}{$.}}{@keys_input_file} = @values;
}
} continue {
close ARGV if eof; # Not eof()!
}
# print Dumper \%HoH_Input, \%HoH_Filter;
my $result = 'output.txt';
open my $output, '>>', $result
or die "Could not open ".$result.": $!";
foreach my $file ( sort { keys %{ $HoH_Input{$b} } <=>
keys %{ $HoH_Input{$a} } } keys %HoH_Input ) {
foreach my $line ( sort { $HoH_Input{$file}{$a} <=>
$HoH_Input{$file}{$b} } keys %{ $HoH_Input{$file} } ) {
foreach my $filter ( sort { keys %{ $HoH_Filter{$b} } <=>
keys %{ $HoH_Filter{$a} } } keys %HoH_Filter ) {
foreach my $filter_line ( sort { $HoH_Filter{$filter}{$a} <=>
$HoH_Filter{$filter}{$b} } keys %{ $HoH_Filter{$filter} } ) {
if ( $HoH_Input{$file}{$line}{'pins'}
eq
$HoH_Filter{$filter}{$filter_line}{'pins'} ) {
my $subtraction = sprintf('%2.2f',
$HoH_Filter{$filter}{$filter_line}{'threshold-1'} -
$HoH_Filter{$filter}{$filter_line}{'threshold-2'});
say $output join (' ',
$HoH_Input{$file}{$line}{'scenario'},
$HoH_Input{$file}{$line}{'pins'},
$HoH_Filter{$filter}{$filter_line}{'threshold-1'},
$HoH_Filter{$filter}{$filter_line}{'threshold-2'},
$subtraction,
'(WAIVED)',
);
next;
}
say $output join (' ',
$HoH_Input{$file}{$line}{'scenario'},
$HoH_Input{$file}{$line}{'pins'},
$HoH_Input{$file}{$line}{'threshold-1'},
$HoH_Input{$file}{$line}{'threshold-2'},
$HoH_Input{$file}{$line}{'subtraction'},
$HoH_Input{$file}{$line}{'notation'},
);
}
}
}
}
close $output
or warn "Could not close ".$result.": $!";
__END__
$ cat output.txt
abcd124 klmn124 100.00 2500.00 -2400.00 (WAIVED)
abcd123 klmn123 100.00 1000.00 -900.00 (VIOLATED)
####
#!/usr/bin/perl
use say;
use strict;
use warnings;
use Data::Dumper;
my @keys_input_file =
('scenario', 'pins', 'threshold-1', 'threshold-2', 'subtraction', 'notation');
my @keys_filter_file =
('pins', 'threshold-1', 'threshold-2', 'justification', 'date');
my %HoH_Input;
my %HoH_Filter;
# reset line numbering on each input file
while (<>) {
chomp;
next if /^\s*$/; # skip empty lines
my @values;
if (/,/) {
@values = split /,/, $_;
@{$HoH_Filter{$ARGV}{$.}}{@keys_filter_file} = @values;
}
else {
@values = split /\s+/, $_;
@{$HoH_Input{$ARGV}{$.}}{@keys_input_file} = @values;
}
} continue {
close ARGV if eof; # Not eof()!
}
# print Dumper \%HoH_Input, \%HoH_Filter;
my %final;
foreach my $file ( sort { keys %{ $HoH_Input{$b} } <=>
keys %{ $HoH_Input{$a} } } keys %HoH_Input ) {
foreach my $line ( sort { $HoH_Input{$file}{$a} <=>
$HoH_Input{$file}{$b} } keys %{ $HoH_Input{$file} } ) {
foreach my $filter ( sort { keys %{ $HoH_Filter{$b} } <=>
keys %{ $HoH_Filter{$a} } } keys %HoH_Filter ) {
foreach my $filter_line ( sort { $HoH_Filter{$filter}{$a} <=>
$HoH_Filter{$filter}{$b} } keys %{ $HoH_Filter{$filter} } ) {
if ( $HoH_Input{$file}{$line}{'pins'}
eq
$HoH_Filter{$filter}{$filter_line}{'pins'} ) {
my $subtraction = sprintf('%2.2f',
$HoH_Filter{$filter}{$filter_line}{'threshold-1'} -
$HoH_Filter{$filter}{$filter_line}{'threshold-2'});
$final{ $HoH_Input{$file}{$line}{'pins'}} =
join (' ',
$HoH_Input{$file}{$line}{'scenario'},
$HoH_Input{$file}{$line}{'pins'},
$HoH_Filter{$filter}{$filter_line}{'threshold-1'},
$HoH_Filter{$filter}{$filter_line}{'threshold-2'},
$subtraction,
'(WAIVED)',
);
next;
}
$final{ $HoH_Input{$file}{$line}{'pins'} } =
join (' ',
$HoH_Input{$file}{$line}{'scenario'},
$HoH_Input{$file}{$line}{'pins'},
$HoH_Input{$file}{$line}{'threshold-1'},
$HoH_Input{$file}{$line}{'threshold-2'},
$HoH_Input{$file}{$line}{'subtraction'},
$HoH_Input{$file}{$line}{'notation'},
);
}
}
}
}
# print Dumper \%final;
my $result = 'output.txt';
open my $output, '>>', $result
or die "Could not open ".$result.": $!";
foreach my $key (sort { $a cmp $b || $a <=> $b } keys %final) {
say $output $final{$key};
}
close $output
or warn "Could not close ".$result.": $!";
####
#!/usr/bin/perl
use say;
use strict;
use warnings;
use Data::Dumper;
my @keys_input_file =
('scenario', 'pins', 'threshold-1', 'threshold-2', 'subtraction', 'notation');
my @keys_filter_file =
('pins', 'threshold-1', 'threshold-2', 'justification', 'date');
my %HoH_Input;
my %HoH_Filter;
# reset line numbering on each input file
while (<>) {
chomp;
next if /^\s*$/; # skip empty lines
my @values;
if (/,/) {
@values = split /,/, $_;
@{$HoH_Filter{$ARGV}{$.}}{@keys_filter_file} = @values;
}
else {
@values = split /\s+/, $_;
@{$HoH_Input{$ARGV}{$.}}{@keys_input_file} = @values;
}
} continue {
close ARGV if eof; # Not eof()!
}
# print Dumper \%HoH_Input, \%HoH_Filter;
my %final;
foreach my $filter ( sort { keys %{ $HoH_Filter{$b} } <=> keys %{ $HoH_Filter{$a} } }
keys %HoH_Filter ) {
foreach my $filter_line ( sort { $HoH_Filter{$filter}{$a} <=> $HoH_Filter{$filter}{$b} }
keys %{ $HoH_Filter{$filter} } ) {
foreach my $file ( sort { keys %{ $HoH_Input{$b} } <=> keys %{ $HoH_Input{$a} } }
keys %HoH_Input ) {
foreach my $line ( sort { $HoH_Input{$file}{$a} <=> $HoH_Input{$file}{$b} }
keys %{ $HoH_Input{$file} } ) {
if ( $HoH_Filter{$filter}{$filter_line}{'pins'}
eq
$HoH_Input{$file}{$line}{'pins'} ) {
my $subtraction = sprintf('%2.2f',
$HoH_Filter{$filter}{$filter_line}{'threshold-1'} -
$HoH_Filter{$filter}{$filter_line}{'threshold-2'});
$final{ $HoH_Input{$file}{$line}{'pins'}} =
join (' ',
$HoH_Input{$file}{$line}{'scenario'},
$HoH_Input{$file}{$line}{'pins'},
$HoH_Filter{$filter}{$filter_line}{'threshold-1'},
$HoH_Filter{$filter}{$filter_line}{'threshold-2'},
$subtraction,
'(WAIVED)',
);
next;
}
$final{ $HoH_Input{$file}{$line}{'pins'} } =
join (' ',
$HoH_Input{$file}{$line}{'scenario'},
$HoH_Input{$file}{$line}{'pins'},
$HoH_Input{$file}{$line}{'threshold-1'},
$HoH_Input{$file}{$line}{'threshold-2'},
$HoH_Input{$file}{$line}{'subtraction'},
$HoH_Input{$file}{$line}{'notation'},
);
}
}
}
}
# print Dumper \%final;
my $result = 'output.txt';
open my $output, '>>', $result
or die "Could not open ".$result.": $!";
foreach my $key (sort { $a cmp $b || $a <=> $b } keys %final) {
say $output $final{$key};
}
close $output
or warn "Could not close ".$result.": $!";
__END__
$ cat output.txt
abcd123 klmn123 100.00 1000.00 -900.00 (VIOLATED)
abcd124 klmn124 100.00 2500.00 -2400.00 (WAIVED)