The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com




View Single Post in the UNIX and Linux Forums - Click on the Thread or Permalink to View Entire Thread -->
  #3 (permalink)  
Old 08-30-2007
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Location: Boston, MA
Posts: 5,131
Quote:
Originally Posted by baghera View Post
How to make a while-loop with awk.

Lets say I have a variable number of columns:

1 4 3
2 4 4
3 5 3

Now I want to add all elements of column 1, 2 and 3 and then divide them by the number of elements in each.

columns= the number of columns which is given as an argument to my script

i = the column we are adding for the moment

this is some pseudo code for what I want to be done:

while [columns > 0]
do
awk '{sum+=$i} END {print sum/NR "\t"}'
i++
column--
done

So when executed the finished result will be:

2 6.5 3.333333

But I don't get my while loop to function. Please help me. This is my code:

#############################
while [ "$columns" -gt 0 ]
do
awk_cmd=`awk -v i=$1 '{sum+=$i} END {print sum/NR}'`
echo "$data | $awk_cmd"
i=`expr $i + 1`
columns=`expr $columns - 1`
done
#############################
baghera,
I believe we've already gone through this exercise once in one of the previous threads. What is it exactly that you're not trying to do differently?
If you're try to calculate the average value per column for all the rows - this solution has also been provided as part of the previous thread.
Try to understand the previous solution and/or adjust it to your 'new' [???] requirement.