====== HBars Bash Grafik Script ====== Hbars adalah script yang dapat menhasilkan grafik {{ :linux:bash:hbars_cover.png |}} #!/bin/bash # # hbars.sh - show some text bars # pass data as: label1,value1,unit1,color1; label2,value2,unit2,colour2; .... # width=50 title="" color=7 pretty=False web=False font=24 usage() { echo "usage: hbars [data] [option] " echo " -h --help print this usage and exit" echo " -c --color set color to all bars (default 7=white)" echo " (0-grey,1-red,2=green,3=yellow,4=blue,5=magenta,6=cyan,7=white)" echo " -p --pretty add different colors to bars (-c overrides)" echo " -t --title top title" echo " -w --width max width of bar (default 50)" echo " -W --Web make output HTML formatted" echo " -f --fontsize fontsize for web output (default 24)" echo "" echo " examples:" echo " echo 'temp,33,C;pressure,14,psi' | ./hbars -t Weather -p -w 40 " echo " ./hbars -t Weather -p -w 40 'temp,33;pressure,14' " echo " cat data.txt | ./hbars -W -f 24 -t 'Raspi Data' > data.htm" echo "" exit 0 } # Show help usage if no pipe data and no cmd line data if [ -t 0 ] && [ $# -eq 0 ] ; then usage fi # Check for command line options while getopts "hpc:t:w:Wf:" arg; do case "$arg" in h) usage ;; c) color=$OPTARG ;; p) pretty=True; icolor=0 ;; t) title=$OPTARG ;; w) width=$OPTARG ;; W) web=True;; f) font=$OPTARG ;; esac done #------------------------------------------------ # Setup formatting for text, Web and color # ----------------------------------------------- if [[ ${color} != 7 && ${pretty} = True ]]; then pretty=False fi colidx=0 setcolors() { if [ $web = True ]; then colors=(gray red green yellow blue magenta cyan white) titlebold="echo '

'" titlereset="echo '

'" #color_set='echo "" ' #color_set="printf ''" color_set="printf '
'"
  color_rs="echo '
'" else colors=(0 1 2 3 4 5 6 7 ) titlebold="tput bold; tput smul" titlereset="tput rmul; tput rmso" color_set="tput setaf ${colors[colidx]}" color_rs="tput rmso" fi } setcolors #---------------------------------------------- # Get data, check if stdlin, file, if not assume string #---------------------------------------------- if [ -p /dev/stdin ]; then lastarg=$(< /dev/stdin) else lastarg=$(echo "${@: -1}") if test -f "$lastarg"; then lastarg=$(<$lastarg) fi fi # Cleanup the input data lastarg=$(echo $lastarg | sed 's/\n/;/g; s/ / /g; s/\t//g; s/;;/;/g') IFS=';' read -r -a array <<< $lastarg # ensure that there is some data if [[ ${array} == 0 ]]; then echo "No data found" exit 0 fi echo "input:$lastarg" #exit 0 #------------------------------------ # Get max value and max label length #------------------------------------ maxval=0 maxlbl=10 #echo "array:${array[@]}" for element in "${array[@]}" do IFS=',' read -r -a datapt <<< $element if (( $(echo "$maxval < ${datapt[1]}" |bc -l) )); then maxval=${datapt[1]} fi if (( $(echo "$maxlbl < ${#datapt[0]}" |bc -l) )); then maxlbl=${#datapt[0]} fi done #--------------------------------- # Print Title - use bold/underline #--------------------------------- if [[ ! -z $title ]]; then printf "\n %${maxlbl}s " " " eval $titlebold printf "%s" "${title}" ; printf "\n\n" eval $titlereset fi #------------------------------------ # Cycle thru data and build bar chart #------------------------------------ for element in "${array[@]}" do # check data values IFS=',' read -r -a datapt <<< $element # check for empty records if [ ${#datapt[0]} = 0 ]; then break fi label=${datapt[0]} if [[ ${label} != "-t*" ]]; then val=${datapt[1]} sval=$(bc <<< "$width * $val / $maxval") # add color, use 4th item if available if [[ ${#datapt[@]} > 3 && $pretty = False ]]; then icolor=${datapt[3]} fi if [[ $pretty = True ]] ; then let colidx++ if [ $colidx -gt 7 ]; then let colidx=1 fi elif [[ ${#datapt[@]} > 3 ]]; then colidx=${datapt[3]} else colidx=$color fi setcolors eval $color_set printf " %${maxlbl}s " "$label" bar="printf '█%.0s' {1..$sval}" eval $bar; # add value and units if available units="" if [[ ${#datapt[@]} > 2 ]]; then units=${datapt[2]} fi printf " %d %s\n\n" $val "$units" eval $color_rs fi done
Sumber : https://funprojects.blog/2021/05/14/bash-bar-charts-for-text-and-web-pages/