$opt{'signal-stat'} //= exists $SIG{INFO} ? 'INFO' : 'QUIT';
$opt{markers} //= '=avg >31.73v <68.27v +50v |0';
$opt{palette} //= $opt{color} && [31, 90, 32];
-$opt{input} = @ARGV && $ARGV[0] =~ m/\A[-0-9]/ ? \@ARGV : undef;
+$opt{input} = @ARGV && $ARGV[0] =~ m/\A[-0-9]/ ? \@ARGV : undef
+ and undef $opt{interval};
my (@lines, @values, @order);
} or warn $@, "Expect slowdown with large datasets!\n";
}
-my $valmatch = qr/$opt{anchor} ( \h* -? [0-9]* \.? [0-9]+ (?: e[+-]?[0-9]+ )? |)/x;
+my $valmatch = qr<
+ $opt{anchor} ( \h* -? [0-9]* \.? [0-9]+ (?: e[+-]?[0-9]+ )? |)
+>x;
while (defined ($_ = $opt{input} ? shift @{ $opt{input} } : readline)) {
s/\r?\n\z//;
s/^\h*// unless $opt{unmodified};
@lines > $nr or return unless $opt{hidemin};
@order = sort { $b <=> $a } @order unless tied @order;
-my $maxval = $opt{maxval} // ($opt{hidemax} ? max grep { length } @values[0 .. $opt{hidemax} - 1] : $order[0]) // 0;
+my $maxval = $opt{maxval} // (
+ $opt{hidemax} ? max grep { length } @values[0 .. $opt{hidemax} - 1] :
+ $order[0]
+) // 0;
my $minval = $opt{minval} // min $order[-1] // (), 0;
my $lenval = $opt{'value-length'} // max map { length } @order;
my $len = defined $opt{trim} && $opt{trim} <= 0 ? -$opt{trim} + 1 :
}
my $line = $lines[$nr] =~ s/\n/$val/r;
printf '%-*s', $len + length($val), $line;
- print $barmark[$_] // $opt{'graph-format'} for 1 .. $size && (($values[$nr] || 0) - $minval) * $size + .5;
+ print $barmark[$_] // $opt{'graph-format'}
+ for 1 .. $size && (($values[$nr] || 0) - $minval) * $size + .5;
say '';
}
continue {
Commonly used after counting, for example users on the current server:
- users | sed 's/ /\n/g' | sort | uniq -c | barcat
+ users | tr ' ' '\n' | sort | uniq -c | barcat
Letter frequencies in text files:
git shortlog -sn | barcat -L3 -s
-Activity of the last days (substitute date C<-v-{}d> on BSD):
+Sparkline graphics of simple input given as inline parameters:
+
+ barcat --spark= 3 1 4 1 5 0 9 2 4
+
+Activity graph of the last days (substitute date C<-v-{}d> on BSD):
( git log --pretty=%ci --since=30day | cut -b-10
seq 0 30 | xargs -i date +%F -d-{}day ) |