2

I have a single column and 12 rows. Each row has numerical values. I want to divide each row values by some constant number (say C) using shell (bash) scripting. How to do this ? Thanks in advance..

0

3 Answers 3

7
martin@dogmeat ~ % cat test 
100
50
25
martin@dogmeat ~ % cat test | while read i; do echo "$i/2" | bc; done
50
25
12
martin@dogmeat ~ % cat test | while read i; do echo "scale = 5; $i/2.0" | bc; done
50.00000
25.00000
12.50000

bc doesn't have a rounding function, so if you want to have those numbers properly rounded you will probably have to implement the function yourself.

3
  • 1
    You can use printf to do the rounding for you Sep 23, 2013 at 18:15
  • 1
    I would use done < test to avoid the UUoC.
    – Joseph R.
    Sep 23, 2013 at 18:16
  • 1
    the trouble with caring about UUoC is that in cat is often just a placeholder for any other command or pipeline that produces output.
    – cas
    Sep 24, 2013 at 0:27
3

If you're OK with integer division:

c=3
while read num; do
    echo $(( num / c ))
done < file

otherwise, you can use

awk -v c=3 '{ print $1/c }' file
1

To get around the intricacies of shell floating point arithmetic, why not use Perl? Here's a one-liner to do it:

C=3 perl -ne 'printf "%.2f\n",$_/$ENV{C}' your_file

The gargantuan answer to this question may also be interesting to you.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .