13 compare-iozone-tables file1 file2 ...
21 my @opt = <<'=back' =~ /B<--(\S+)>/g;
31 The two or more files are compared cell by cell.
37 use lib
"$FindBin::Bin/../lib";
43 use File
::Basename
qw(dirname);
44 use File
::Path
qw(mkpath);
49 use Hash
::Util
qw(lock_keys);
52 lock_keys
%Opt, map { /([^=|!]+)/ } @opt;
61 my $longest_table_name = 0;
62 for my $i (0..$#ARGV) {
63 my($file) = $ARGV[$i];
64 open my $fh, $file or die "Could not open '$file': $!";
69 if (/Excel output is below/) {
73 if (/^"(.+?)"$/) { # "Writer report"
75 $curtable =~ s/\sreport$//;
76 $curtable =~ s/\s+/_/g;
77 if (length $curtable > $longest_table_name) {
78 $longest_table_name = length $curtable;
81 } elsif (/^\s+(".+"$)/) { # "4" "8" "16" "32" ...
82 @columns = map { /"(\d+)"/ } split " ", $1;
84 } elsif (/^"(.+?)"\s+([\d\s]+)$/) { # "2048" 219 358 365 347 ...
86 my(@curval) = split " ", $2;
87 for my $j (0..$#curval) {
88 $S->{$curtable}{$curline}{$columns[$j]}[$i] = $curval[$j];
94 for my $table (sort keys %$S) {
97 for my $line (sort {$a <=> $b} keys %$v) {
99 for my $col (sort {$a <=> $b} keys %$v2) {
100 my $val = $v2->{$col};
101 my $line = sprintf "%-*s %6d %5d", $longest_table_name, $table, $line, $col;
102 for my $i (0..$#$val) {
104 $line .= sprintf " %7d", $val->[$i];
107 if ($val->[$i-1] > 0) {
108 $growth = sprintf " %4d%%", 100 * $val->[$i] / $val->[$i-1] - 100;
112 $line .= sprintf " %8s %7d", $growth, $val->[$i];
114 $tablesum[$i] += $val->[$i];
119 my $line = sprintf "tablesum %-*s", $longest_table_name, $table;
120 for my $i (0..$#tablesum) {
122 $line .= sprintf " %8d", $tablesum[$i];
125 if ($tablesum[$i-1] > 0) {
126 $growth = sprintf " %4d%%", 100 * $tablesum[$i] / $tablesum[$i-1] - 100;
130 $line .= sprintf " %8s %8d", $growth, $tablesum[$i];
138 # cperl-indent-level: 4