#!/usr/bin/perl # -*- perl -*- use FileHandle; # $| = 1; require 'getopts.pl'; &Getopts('lpr'); if (eval 'require Time::HiRes') { Time::HiRes->import('time'); } @files = @ARGV; foreach $f (@files) { my $fh = new FileHandle; if (open $fh, "< $f") { push @fhs, [$f, $fh, 0]; } else { warn "Couldn't open file `$f': $!; ignoring.\n"; } } die "Couldn't open any files; aborting" unless @fhs; for (;;) { $change = 0; my $time = time; foreach $item (@fhs) { my ($fn, $fh, $fl, $fs, $fl1) = @$item; $b = 0; seek $fh, 0, 1; while (<$fh>) { if ($opt_l) { $b++ if /\n\z/; } else { $b += length; } } $fl += $b; if ($b) { $fl1 = $fl unless defined $fl1; $ns = "$fn: $fl "; print $ns; printf "%.2f", $fl/66 if $opt_p && $opt_l; printf "%s/s", rate(($fl-$fl1)/($time -$^T)) if $time > $^T && $opt_r; $change = 1; @{$item}[2,3,4] = ($fl, $ns, $fl1); } else { print $fs; } } sleep 5 unless $change; print "\r"; } sub rate { my $r = shift; my @m = (1000000000, 1000000, 1000, 1, .0001, .0000001); my @l = ('G', 'M', 'k', '', 'm', 'u'); for (0 .. $#m) { if ($r >= $m[$_]) { return sprintf "%.2f%s", $r/$m[$_], $l[$_]; } } }