Solved: Add thousands separator comma in number [Linux Bash]


In this article I will share a sample script to add thousands separator comma in a number which can be decimal or a full integer. A common mistake that programmers make is to present the results of calculations to the user without formatting them first. It’s difficult for users to ascertain whether 43245435 goes into the millions without counting from right to left and mentally inserting a comma every three digits. So  A 'comma' will be used to add thousands separator.

 

Script to add thousands separator

Below is a sample script which can be used to add thousands separator comma in a number. You can modify the script based on your requirement.

[root@node1 ~]# cat /tmp/nicenumber.sh
   #!/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.

   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 '.'

     integer=$(echo $1 | cut -d. -f1)        # Left of the decimal
     decimal=$(echo $1 | cut -d. -f2)        # Right of the decimal
     
     # Check if number has more than the integer part.
     if [ "$decimal" != "$1" ]; then
        # There's a fractional part, so let's include it.
        result="${DD:= '.'}$decimal"
     fi

     thousands=$integer

     while [ $thousands -gt 999 ]; do
          remainder=$(($thousands % 1000))    # Three least significant digits

          # We need 'remainder' to be three digits. Do we need to add zeros?
          while [ ${#remainder} -lt 3 ] ; do  # Force leading zeros
              remainder="0$remainder"
          done

          result="${TD:=","}${remainder}${result}"    # Builds right to left
          thousands=$(($thousands / 1000))    # To left of remainder, if any
     done

     nicenum="${thousands}${result}"
     if [ ! -z $2 ] ; then
        echo $nicenum
     fi
   }

   DD="."  # Decimal point delimiter, to separate whole and fractional values
   TD=","  # Add thousands separator using (,) to separate every three digits

   # Input validation
   if [ $# -eq 0 ] ; then
     echo "Please provide an integer value"
     exit 0
   fi

   # BEGIN MAIN SCRIPT
   # =================

   nicenumber $1 1   # Second arg forces nicenumber to 'echo' output.

   exit 0

 

How the script works?

The heart of this script is the while loop within the nicenumber() function, which iteratively keeps removing the three least significant digits from the numeric value stored in the variable thousands and attaches these digits to the pretty version of the number that it’s building up.
The loop then reduces the number stored in thousands and feeds it through the loop again if necessary. Once the nicenumber() function is done, the main script logic starts.
First it parses any options passed to the script with getopts and then finally it calls the nicenumber() function with the last argument the user specified.

 

Running the script

Here I have executed the script with a couple of examples to add thousands separator to the provided integers and decimal values.

[root@node1 ~]# /tmp/nicenumber.sh 123456789
123,456,789

[root@node1 ~]# /tmp/nicenumber.sh 1234567890
1,234,567,890

[root@node1 ~]# /tmp/nicenumber.sh 1234567890.456
1,234,567,890.456

 

Lastly I hope the steps from the article to add thousands separator comma in a number using shell/bash script in Linux was helpful. So, let me know your suggestions and feedback using the comment section.

 

References:
Wicked Cool Scripts

Deepak Prasad

Deepak Prasad

He is the founder of GoLinuxCloud and brings over a decade of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive experience, he excels in various domains, from development to DevOps, Networking, and Security, ensuring robust and efficient solutions for diverse projects. You can connect with him on his LinkedIn profile.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com

Thank You for your support!!

Leave a Comment