git.shiar.nl
/
barcat.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
explain -w default (COLUMNS environment)
[barcat.git]
/
barcat
diff --git
a/barcat
b/barcat
index 37445908b20682e1d56c06fc962a989c750c78bf..edc12bf9303adb754d0995af62501711932c7f7a 100755
(executable)
--- a/
barcat
+++ b/
barcat
@@
-27,6
+27,8
@@
GetOptions(\%opt,
} or die $@ =~ s/(?:\ at\ \N+)?\Z/ for option $_[0]/r;
},
'human-readable|H!',
} or die $@ =~ s/(?:\ at\ \N+)?\Z/ for option $_[0]/r;
},
'human-readable|H!',
+ 'sexagesimal!',
+ 'reformat!',
'interval|t:i',
'trim|length|l=s' => sub {
my ($optname, $optval) = @_;
'interval|t:i',
'trim|length|l=s' => sub {
my ($optname, $optval) = @_;
@@
-115,7
+117,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{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';
$opt{'value-length'} = 1 if $opt{unmodified};
$opt{'signal-stat'} //= exists $SIG{INFO} ? 'INFO' : 'QUIT';
$opt{markers} //= '=avg >31.73v <68.27v +50v |0';
@@
-127,9
+129,11
@@
$opt{hidemin} = ($opt{hidemin} || 1) - 1;
$opt{input} = (@ARGV && $ARGV[0] =~ m/\A[-0-9]/) ? \@ARGV : undef
and undef $opt{interval};
$opt{input} = (@ARGV && $ARGV[0] =~ m/\A[-0-9]/) ? \@ARGV : undef
and undef $opt{interval};
-$opt{'sum-format'} = sub { sprintf '%.8g', $_[0] };
$opt{'calc-format'} = sub { sprintf '%*.*f', 0, 2, $_[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
my $unit = (
log(abs $_[0] || 1) / log(10)
- 3 * (abs($_[0]) < .9995) # shift to smaller unit if below 1
@@
-146,7
+150,8
@@
$opt{'value-format'} = $opt{units} && sub {
$#{$opt{units}} * 1.5 < abs $unit ? sprintf('e%d', $unit) :
$opt{units}->[$unit/3] # suffix
);
$#{$opt{units}} * 1.5 < abs $unit ? sprintf('e%d', $unit) :
$opt{units}->[$unit/3] # suffix
);
-};
+} and $opt{reformat}++;
+$opt{'value-format'} ||= sub { sprintf '%.8g', $_[0] };
my (@lines, @values, @order);
my (@lines, @values, @order);
@@
-193,10
+198,6
@@
while (defined ($_ = $opt{input} ? shift @{ $opt{input} } : readline)) {
and $. % $opt{interval} == 0;
}
and $. % $opt{interval} == 0;
}
-if ($opt{'zero-missing'}) {
- push @values, (0) x 10;
-}
-
$SIG{INT} = 'DEFAULT';
sub color {
$SIG{INT} = 'DEFAULT';
sub color {
@@
-309,8
+310,9
@@
while ($nr <= $limit) {
print $indicator if defined $indicator;
if (length $val) {
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{reformat} ? $opt{'value-format'}->($val) : $val
+ );
color($color) for $val;
}
my $line = $lines[$nr] =~ s/\n/$val/r;
color($color) for $val;
}
my $line = $lines[$nr] =~ s/\n/$val/r;
@@
-339,19
+341,19
@@
sub show_stat {
$linemin += @lines;
$linemax = @lines - $linemax;
}
$linemin += @lines;
$linemax = @lines - $linemax;
}
- printf '%.8g of ', $opt{'
sum
-format'}->(
+ printf '%.8g of ', $opt{'
value
-format'}->(
sum(grep {length} @values[$linemin .. $linemax]) // 0
);
}
if (@order) {
my $total = sum @order;
sum(grep {length} @values[$linemin .. $linemax]) // 0
);
}
if (@order) {
my $total = sum @order;
- printf '%s total', color(1) . $opt{'
sum
-format'}->($total) . color(0);
+ printf '%s total', color(1) . $opt{'
value
-format'}->($total) . color(0);
printf ' in %d values', scalar @order;
printf ' over %d lines', scalar @lines if @order != @lines;
printf(' (%s min, %s avg, %s max)',
printf ' in %d values', scalar @order;
printf ' over %d lines', scalar @lines if @order != @lines;
printf(' (%s min, %s avg, %s max)',
- color(31) . ($opt{
'value-format'} ||
sub {$_[0]})->($order[-1]) . color(0),
- color(36) . ($opt{
'value-format'} ||
$opt{'calc-format'})->($total / @order) . color(0),
- color(32) . ($opt{
'value-format'} ||
sub {$_[0]})->($order[0]) . color(0),
+ color(31) . ($opt{
reformat} ? $opt{'value-format'} :
sub {$_[0]})->($order[-1]) . color(0),
+ color(36) . ($opt{
reformat} ? $opt{'value-format'} :
$opt{'calc-format'})->($total / @order) . color(0),
+ color(32) . ($opt{
reformat} ? $opt{'value-format'} :
sub {$_[0]})->($order[0]) . color(0),
);
}
say '';
);
}
say '';
@@
-380,6
+382,7
@@
Options:
--header Prepend a chart axis with minimum and maximum
values labeled
-H, --human-readable Format values using SI unit prefixes
--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
-t, --interval[=(N|-LINES)]
Output partial progress every given number of
seconds or input lines
@@
-467,6
+470,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.
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[=(<seconds> | -<lines>)]
Output partial progress every given number of seconds or input lines.
=item -t, --interval[=(<seconds> | -<lines>)]
Output partial progress every given number of seconds or input lines.
@@
-578,7
+585,9
@@
Reserved space for numbers.
=item -w, --width=<columns>
Override the maximum number of columns to use.
=item -w, --width=<columns>
Override the maximum number of columns to use.
-Appended graphics will extend to fill up the entire screen.
+Appended graphics will extend to fill up the entire screen,
+otherwise determined by the environment variable I<COLUMNS>
+or by running the C<tput> command.
=item -h, --usage
=item -h, --usage
@@
-613,11
+622,11
@@
Compare media metadata, like image size or play time:
exiftool -T -p '$megapixels ($imagesize) $filename' * | barcat
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 |
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:
Memory usage of user processes with long names truncated: