52 lines
2.0 KiB
Fish
52 lines
2.0 KiB
Fish
set -g spark_version 1.0.0
|
|
|
|
complete -xc spark -n __fish_use_subcommand -a --help -d "Show usage help"
|
|
complete -xc spark -n __fish_use_subcommand -a --version -d "$spark_version"
|
|
complete -xc spark -n __fish_use_subcommand -a --min -d "Minimum range value"
|
|
complete -xc spark -n __fish_use_subcommand -a --max -d "Maximum range value"
|
|
|
|
function spark -d "sparkline generator"
|
|
if isatty
|
|
switch "$argv"
|
|
case {,-}-v{ersion,}
|
|
echo "spark version $spark_version"
|
|
case {,-}-h{elp,}
|
|
echo "usage: spark [--min=<n> --max=<n>] <numbers...> Draw sparklines"
|
|
echo "examples:"
|
|
echo " spark 1 2 3 4"
|
|
echo " seq 100 | sort -R | spark"
|
|
echo " awk \\\$0=length spark.fish | spark"
|
|
case \*
|
|
echo $argv | spark $argv
|
|
end
|
|
return
|
|
end
|
|
|
|
command awk -v FS="[[:space:],]*" -v argv="$argv" '
|
|
BEGIN {
|
|
min = match(argv, /--min=[0-9]+/) ? substr(argv, RSTART + 6, RLENGTH - 6) + 0 : ""
|
|
max = match(argv, /--max=[0-9]+/) ? substr(argv, RSTART + 6, RLENGTH - 6) + 0 : ""
|
|
}
|
|
{
|
|
for (i = j = 1; i <= NF; i++) {
|
|
if ($i ~ /^--/) continue
|
|
if ($i !~ /^-?[0-9]/) data[count + j++] = ""
|
|
else {
|
|
v = data[count + j++] = int($i)
|
|
if (max == "" && min == "") max = min = v
|
|
if (max < v) max = v
|
|
if (min > v ) min = v
|
|
}
|
|
}
|
|
count += j - 1
|
|
}
|
|
END {
|
|
n = split(min == max && max ? "▅ ▅" : "▁ ▂ ▃ ▄ ▅ ▆ ▇ █", blocks, " ")
|
|
scale = (scale = int(256 * (max - min) / (n - 1))) ? scale : 1
|
|
for (i = 1; i <= count; i++)
|
|
out = out (data[i] == "" ? " " : blocks[idx = int(256 * (data[i] - min) / scale) + 1])
|
|
print out
|
|
}
|
|
'
|
|
end
|