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..
Asked
Active
Viewed 1.5k times
3 Answers
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.

Martin von Wittich
- 14,187
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

glenn jackman
- 85,964
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.
printf
to do the rounding for you – glenn jackman Sep 23 '13 at 18:15done < test
to avoid the UUoC. – Joseph R. Sep 23 '13 at 18:16cat
is often just a placeholder for any other command or pipeline that produces output. – cas Sep 24 '13 at 00:27