#!/bin/bash # nicenumber--Given a number, shows it in comma-separated form. # Expects DD (decimal point delimiter) and TD (thousands delimiter) # to be instantiated. Instantiates nicenum or, if a second arg is # specified, the output is echoed to stdout. proc nicenumber { # Note that we assume that '.' is the decimal separator in # the INPUT value to this script. The decimal separator in the output # value is '.' unless specified by the user with the -d flag. setglobal integer = $[echo $1 | cut -d. -f1] # left of the decimal setglobal decimal = $[echo $1 | cut -d. -f2] # right of the decimal # Check if our number has more than just the integer part. if test $decimal != $1 { # There's a fractional part, so let's include it. setglobal result = ""$(DD:= '.')$decimal"" } setglobal thousands = $integer while test $thousands -gt 999 { setglobal remainder = $shExpr('$thousands % 1000') # three least significant digits # We need ‘remainder’ to be three digits. Do we need to add zeroes? while test $(#remainder) -lt 3 { # Force leading zeros setglobal remainder = ""0$remainder"" } setglobal result = ""$(TD:=",")$(remainder)$(result)"" # Builds right to left setglobal thousands = $shExpr('$thousands / 1000') # To left of remainder, if any } setglobal nicenum = ""$(thousands)$(result)"" if test ! -z $2 { echo $nicenum } } #DD="." # Decimal point delimiter to separate whole and fractional values #TD="," # Thousands delimiter, to separate every three digits # BEGIN MAIN SCRIPT # ================= #while getopts "d:t:" opt; do # case $opt in # d ) DD="$OPTARG" ;; # t ) TD="$OPTARG" ;; # esac #done #shift $(($OPTIND - 1)) # Input validation #if [ $# -eq 0 ] ; then # echo "Usage: $(basename $0) [-d c] [-t c] numeric_value" # echo " -d specifies the decimal point delimiter (default '.')" # echo " -t specifies the thousands delimiter (default ',')" # exit 0 #fi #nicenumber $1 1 # Second arg forces nicenumber to 'echo' output. #exit 0