X-Git-Url: http://git.shiar.nl/barcat.git/blobdiff_plain/bad38f691ec8cebb02f3d63292f28dd9d9f21cb9..0797e711fd25d00e42d45879c96387a5e61eecd2:/barcat diff --git a/barcat b/barcat index 3744590..061b256 100755 --- a/barcat +++ b/barcat @@ -27,6 +27,7 @@ GetOptions(\%opt, } or die $@ =~ s/(?:\ at\ \N+)?\Z/ for option $_[0]/r; }, 'human-readable|H!', + 'sexagesimal!', 'interval|t:i', 'trim|length|l=s' => sub { my ($optname, $optval) = @_; @@ -115,7 +116,7 @@ $opt{trim} *= $opt{width} / 100 if $opt{trimpct}; $opt{units} = [split //, ' kMGTPEZYyzafpn'.($opt{ascii} ? 'u' : 'μ').'m'] if $opt{'human-readable'}; $opt{anchor} //= qr/\A/; -$opt{'value-length'} = 6 if $opt{units}; +$opt{'value-length'} = 4 if $opt{units}; $opt{'value-length'} = 1 if $opt{unmodified}; $opt{'signal-stat'} //= exists $SIG{INFO} ? 'INFO' : 'QUIT'; $opt{markers} //= '=avg >31.73v <68.27v +50v |0'; @@ -129,7 +130,10 @@ $opt{input} = (@ARGV && $ARGV[0] =~ m/\A[-0-9]/) ? \@ARGV : undef $opt{'sum-format'} = sub { sprintf '%.8g', $_[0] }; $opt{'calc-format'} = sub { sprintf '%*.*f', 0, 2, $_[0] }; -$opt{'value-format'} = $opt{units} && sub { +$opt{'value-format'} = $opt{sexagesimal} ? sub { + my $s = abs($_[0]) + .5; + sprintf('%s%d:%02d:%02d', $_[0] < 0 && '-', $s/3600, $s/60%60, $s%60); +} : $opt{units} && sub { my $unit = ( log(abs $_[0] || 1) / log(10) - 3 * (abs($_[0]) < .9995) # shift to smaller unit if below 1 @@ -309,8 +313,9 @@ while ($nr <= $limit) { print $indicator if defined $indicator; if (length $val) { - $val = $opt{'value-format'} ? $opt{'value-format'}->($val) : - sprintf "%*s", $lenval, $val; + $val = sprintf("%*s", $lenval, + $opt{'value-format'} ? $opt{'value-format'}->($val) : $val + ); color($color) for $val; } my $line = $lines[$nr] =~ s/\n/$val/r; @@ -380,6 +385,7 @@ Options: --header Prepend a chart axis with minimum and maximum values labeled -H, --human-readable Format values using SI unit prefixes + --sexagesimal Convert seconds to HH:MM:SS time format -t, --interval[=(N|-LINES)] Output partial progress every given number of seconds or input lines @@ -467,6 +473,10 @@ turning long numbers like I<12356789> into I<12.4M>. Also changes an exponent I<1.602176634e-19> to I<160.2z>. Short integers are aligned but kept without decimal point. +=item --sexagesimal + +Convert seconds to HH:MM:SS time format. + =item -t, --interval[=( | -)] Output partial progress every given number of seconds or input lines. @@ -613,11 +623,11 @@ Compare media metadata, like image size or play time: exiftool -T -p '$megapixels ($imagesize) $filename' * | barcat - exiftool -T -p '$duration# $avgbitrate# $filename' * | barcat -H + exiftool -T -p '$duration# $avgbitrate# $filename' * | barcat --sexagesimal find -type f -print0 | xargs -0 -L1 \ ffprobe -show_format -of json -v error | - jq -r '[.format|.duration,.bit_rate,.filename]|join(" ")' | barcat -H + jq -r '.format|.duration+" "+.bit_rate+" "+.filename' | barcat --sex Memory usage of user processes with long names truncated: