X-Git-Url: http://git.shiar.nl/barcat.git/blobdiff_plain/a052b8d20f25e69c82104135c9925c17dcaa3eb3..17a26cb76ab04c0cdd33acca2d64b3d3397456e4:/graph diff --git a/graph b/graph index e76ec64..8144868 100755 --- a/graph +++ b/graph @@ -1,9 +1,10 @@ #!/usr/bin/env perl -use 5.014; +use 5.018; use warnings; use utf8; use List::Util qw( min max sum ); use open qw( :std :utf8 ); +use experimental qw( lexical_subs ); our $VERSION = '1.02'; @@ -12,10 +13,20 @@ sub podexit { require Pod::Usage; Pod::Usage::pod2usage(-exitval => 0, -perldocopt => '-oman', @_); } -GetOptions(\my %opt, +my %opt; +GetOptions(\%opt, 'color|c!', - 'follow|f:i', - 'trim|length|l=i', + 'C' => sub { $opt{color} = 0 }, + 'interval|t:i', + 'trim|length|l=s' => sub { + my ($optname, $optval) = @_; + $optval =~ s/%$// and $opt{trimpct}++; + $optval =~ m/^-?[0-9]+$/ or die( + "Value \"$optval\" invalid for option $optname", + " (number or percentage expected)\n" + ); + $opt{trim} = $optval; + }, 'markers|m=s', 'unmodified|u!', 'width|w=i', @@ -25,14 +36,15 @@ GetOptions(\my %opt, $opt{width} ||= $ENV{COLUMNS} || 80; $opt{color} //= -t *STDOUT; # enable on tty +$opt{trim} *= $opt{width} / 100 if $opt{trimpct}; -if (defined $opt{follow}) { - $opt{follow} ||= 1; +if (defined $opt{interval}) { + $opt{interval} ||= 1; $SIG{ALRM} = sub { show_lines(); - alarm $opt{follow}; + alarm $opt{interval}; }; - alarm $opt{follow}; + alarm $opt{interval}; } $SIG{INT} = 'IGNORE'; # continue after assumed eof @@ -53,13 +65,13 @@ while (readline) { } push @lines, $_; } -@lines or exit; $SIG{INT} = 'DEFAULT'; sub show_lines { state $nr = 0; +@lines and @lines > $nr or return; my @order = sort { $b <=> $a } grep { length } @values; my $maxval = $order[0]; @@ -138,11 +150,11 @@ Force colored output of values and bar markers. Defaults on if output is a tty, disabled otherwise such as when piped or redirected. -=item -f, --follow[=] +=item -t, --interval[=] -Interval to output partial progress. +Interval time to output partial progress. -=item -l, --length=[-] +=item -l, --length=[-][%] Trim line contents (between number and bars) to a maximum number of characters. @@ -226,6 +238,28 @@ Any kind of database query with leading counts: echo 'SELECT count(*),schemaname FROM pg_tables GROUP BY 2' | psql -t | graph -u +Exchange rate USD/EUR history from CSV download provided by ECB: + + curl https://sdw.ecb.europa.eu/export.do \ + -Gd 'node=SEARCHRESULTS&q=EXR.D.USD.EUR.SP00.A&exportType=csv' | + awk -F, '{RS="\r\n"} /^[12]/{print $2,$1}' | graph + +Total population history from the World Bank dataset (XML): + + curl http://api.worldbank.org/v2/country/1W/indicator/SP.POP.TOTL | + xmllint --xpath '//*[local-name()="date" or local-name()="value"]' - | + awk -F'<[^>]+>' 'BEGIN {RS=""} {print $4,$2}' | graph + +Movies per year from prepared JSON data: + + curl https://github.com/prust/wikipedia-movie-data/raw/master/movies.json | + jq '.[].year' | uniq -c | graph + +Pokémon height comparison: + + curl https://github.com/Biuni/PokemonGO-Pokedex/raw/master/pokedex.json | + jq -r '.pokemon[] | [.height,.num,.name] | join(" ")' | graph + Git statistics, such commit count by year: git log --pretty=%ci | cut -b-4 | uniq -c | graph @@ -237,7 +271,7 @@ Or the most frequent authors: Latency history: ping google.com | - perl -pe '$|=1; print s/ time=(.*)// ? "$1 for " : "> "' | graph -f + perl -pe '$|=1; print s/ time=(.*)// ? "$1 for " : "> "' | graph -t =head1 AUTHOR