File size distribution: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: added wording to the REXX section header.)
(Added Perl example)
Line 272: Line 272:
Number of inaccessible files : 0
Number of inaccessible files : 0
</pre>
</pre>

=={{header|Perl}}==
{{trans|Perl 6}}
<lang perl>use File::Find;
use List::Util qw(max);

my %fsize;
$dir = shift || '.';
find(\&fsize, $dir);

$max = max($max,$fsize{$_}) for keys %fsize;
$total += $size while (undef,$size) = each %fsize;

push @res, "File size distribution in bytes for directory: $dir\n";
for (0 .. max(keys %fsize)) {
printf "# files @ %4sb %8s: %s\n", $_ ? '10e'.($_-1) : 0, $fsize{$_} // 0,
histogram( $max, $fsize{$_} // 0, 80);
}
print "$total total files.\n";

sub histogram {
my($max, $value, $width) = @_;
my @blocks = qw<| ▏ ▎ ▍ ▌ ▋ ▊ ▉ █>;
my $scaled = int $value * $width / $max;
my $end = $scaled % 8;
my $bar = int $scaled / 8;
my $B = $blocks[8] x ($bar * 8) . ($end ? $blocks[$end] : '');
}

sub fsize { $fsize{ log10( (lstat($_))[7] ) }++ }
sub log10 { my($s) = @_; $s ? int log($s)/log(10) : 0 }</lang>
{{out}}
<pre># files @ 0b 5:
# files @ 10e0b 46455: ████████████████████████████████████████████████████████████████████████████████
# files @ 10e1b 26146: ████████████████████████████████████████▋
# files @ 10e2b 3993: ▊
# files @ 10e3b 1222: ▎
# files @ 10e4b 19:
# files @ 10e5b 3:
77843 total files.</pre>


=={{header|Perl 6}}==
=={{header|Perl 6}}==