2 |
|
|
3 |
use strict; |
use strict; |
4 |
use Term::ReadKey qw(GetTerminalSize); |
use Term::ReadKey qw(GetTerminalSize); |
5 |
|
use Getopt::Long; |
6 |
|
|
7 |
|
my $human = 0; |
8 |
|
GetOptions( |
9 |
|
'human!' => \$human, |
10 |
|
); |
11 |
|
|
12 |
my @lines; |
my @lines; |
13 |
|
|
16 |
my $rest_len = 0; |
my $rest_len = 0; |
17 |
my $sum = 0; |
my $sum = 0; |
18 |
|
|
19 |
|
my @units = qw/b k M G/; |
20 |
|
sub unit { |
21 |
|
my $v = shift; |
22 |
|
|
23 |
|
return $v unless $human; |
24 |
|
|
25 |
|
my $o = 0; |
26 |
|
|
27 |
|
while ( ( $v / 10000 ) >= 1 ) { |
28 |
|
$o++; |
29 |
|
$v /= 1024; |
30 |
|
} |
31 |
|
|
32 |
|
if ( $v >= 1 ) { |
33 |
|
return sprintf("%d%s", $v, $units[$o]); |
34 |
|
} elsif ( $v == 0 ) { |
35 |
|
return 0; |
36 |
|
} else { |
37 |
|
return sprintf("%.1f%s", $v, $units[$o]); |
38 |
|
} |
39 |
|
} |
40 |
|
|
41 |
while(<>) { |
while(<>) { |
42 |
chomp; |
chomp; |
43 |
if (/\s*([\d\.]+)\s+(.+)/) { |
if (/\s*([\d\.]+)\s+(.+)/) { |
88 |
foreach my $l (@lines) { |
foreach my $l (@lines) { |
89 |
my ($size,$r,$tmpsum) = @{$l}; |
my ($size,$r,$tmpsum) = @{$l}; |
90 |
# printf "%-50s\t[ + %-8d= %-8d ]\n",$r,$size,$tmpsum; |
# printf "%-50s\t[ + %-8d= %-8d ]\n",$r,$size,$tmpsum; |
91 |
printf "%-${rest_len}s %${size_len}d %-${bar_size}s %${sum_len}d\n", |
printf "%-${rest_len}s %${size_len}s %-${bar_size}s %${sum_len}s\n", |
92 |
$r, $size, bar($size, $sum, $tmpsum, $sum), $tmpsum; |
$r, unit($size), bar($size, $sum, $tmpsum, $sum), unit($tmpsum); |
93 |
} |
} |