#!/usr/bin/perl -s

$duwidth = 17;	# width of sizes columns
$dfwidth = 10;	# width of diffs columns

# dusumm - summarize the `du -s` output contained in the given files
# Steve Kinzler, steve@kinzler.com, Sep 90/Sep 00
# https://kinzler.com/me/home.html#unixadm

$usage = <<EOF;
usage: $0 [ -d ] .du-file ...
	-d	don't list differences between columns
EOF
die $usage if $h || ! @ARGV;

@argv = @ARGV;

while (<>) {
	chop;
	($size, $file) = split(/\s+/, $_, 2);
	$files{$file}++;
	$table{$file, $ARGV} = $size;
}

$n = 0;
foreach $du (@argv) {
	printf "%${dfwidth}s  ", '+/-' if ! $d && $n++;
	printf "%${duwidth}s  ", $du;
}
print "FILES\n";

foreach $file (sort keys %files) {
	$n = 0;
	foreach $du (@argv) {
		printf "%${dfwidth}d  ", $table{$file, $du} - $prev
			if ! $d && $n++;
		printf "%${duwidth}d  ", $prev = $table{$file, $du};
		$sum{$du} += $prev;
	}
	print "$file\n";
}

$n = 0;
foreach $du (@argv) {
	printf "%${dfwidth}d  ", $sum{$du} - $prev if ! $d && $n++;
	printf "%${duwidth}s  ", $prev = $sum{$du};
}
print "TOTAL\n";
