Expected behaviour equivalent to sort|uniq.
$opt{trim} *= $opt{width} / 100 if $opt{trimpct};
$opt{units} = [split //, ' kMGTPEZYRQqryzafpn'.($opt{ascii} ? 'u' : 'μ').'m']
if $opt{'human-readable'};
-$opt{anchor} //= qr/\A/;
$opt{'value-length'} = 4 if $opt{units};
$opt{'value-length'} = 1 if $opt{unmodified};
$opt{'signal-stat'} //= exists $SIG{INFO} ? 'INFO' : 'QUIT';
}
my $float = qr<[0-9]* [.]? [0-9]+ (?: e[+-]?[0-9]+ )?>; # positive numberish
-my $valmatch = qr< $opt{anchor} ( \h* -? $float |) >;
+my $valmatch = $opt{anchor} // qr/\A/;
+$valmatch .= !$opt{count} ? qr/( \h* -? $float |)/ :
+ $opt{anchor} ? qr/(\S*)/ : qr/(.*)/;
+
while (defined ($_ = $opt{input} ? shift @{ $opt{input} } : readline)) {
s/\r?\n\z//;
my $valnum;
if ($opt{count}) {
- ($valnum) = m/$opt{anchor} (\S*)/;
- $valnum //= '';
+ $valnum = m/$valmatch/ && $1;
$uniq{$valnum}++ and next;
push @values, $valnum;
s/\A/\n /;
=item B<-c>, B<--count>
Omit repetitions and count the number of occurrences.
-Similar to piping input to C<sort | uniq -c>
+Similar to piping input through C<sort | uniq -c>
but keeping the order of first appearances.
+Lines are omitted if they (or a specified field) are identical,
+and the amount of matches is prepended and used as values
+for bars and subsequent statistics.
+
=item B<-f>, B<--field>=([B<+>]I<number> | I<regexp>)
Compare values after a given number of whitespace separators,
barcat --count input/duplicates.txt
- 3 thrice ----<+->
- 2 twice ----<
- 1 once ---
-10 most ----<+->=------------------
- 3 ----<+->
- 1 different ---
+ 3 thrice -+-->=--
+ 2 twice -+-->
+ 1 once -+-
+10 most -+-->=-------------------
+ 1 -+-
+ 1 indented -+-
+ 1 different -+-
+ 1 different -+-
--- /dev/null
+barcat -c input/duplicolumns.txt
+2 prefix 1 1 ------------+--=-----------
+1 random 2 2 ------------+-
+1 prefix 3 1 ------------+-
+1 text 1 2 ------------+-
+1 prefix 2 1 ------------+-
+2 prefix 3 2 ------------+--=-----------
+1 prefix 2 2 ------------+-
+1 prefix 3 0 ------------+-
+1 prefix 1 2 ------------+-
+1 prefix 2 ------------+-
-barcat -c input/duplicolumns.txt
+barcat -c -f0 input/duplicolumns.txt
10 prefix 1 1 -+-------=--->------------
1 random 2 2 -+-
1 text 1 2 -+-
-barcat -c -f'\S\K(.*)' input/duplicolumns.txt
-2 prefix 1 1 ------------+--=-----------
-1 random 2 2 ------------+-
-1 prefix 3 1 ------------+-
-1 text 1 2 ------------+-
-1 prefix 2 1 ------------+-
-2 prefix 3 2 ------------+--=-----------
-1 prefix 2 2 ------------+-
-1 prefix 3 0 ------------+-
-1 prefix 1 2 ------------+-
-1 prefix 2 ------------+-
+barcat -c -f'prefix\ ' input/duplicolumns.txt
+3 prefix 1 1 -------------------+
+2 random 2 2 --------------
+4 prefix 3 1 -------------------+-->----
+3 prefix 2 1 -------------------+
----- +++++++++++++++++
6 most ----<--+---=>--------------------
1 ----<-
-3 most ---<----+=>---
-2 indented ---<----+
-1 different ---<-
+3 most ---+---=->---
+1 indented ---+
+1 different ---+
+1 different ---+