![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| while loop inside while loop | panknil | Shell Programming and Scripting | 0 | 01-07-2008 12:49 PM |
| For loop | xramm | HP-UX | 3 | 10-10-2007 02:20 PM |
| While Loop | hemangjani | Shell Programming and Scripting | 2 | 11-02-2006 11:01 AM |
| for loop | munnabhai1 | Shell Programming and Scripting | 3 | 04-06-2006 02:30 PM |
| how to get the similar function in while loop or for loop | trynew | Shell Programming and Scripting | 3 | 06-17-2002 11:09 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
While-loop with awk
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 ############################# |
|
||||
|
will this work?
Code:
awk -f temp.awk tempfile Code:
{ for(i=1;i<=NF;i++) { sum[i]+=$i } }
END { for (i in sum) {printf("%f\t", sum[i]/NR) } }
Quote:
Last edited by ranj@chn; 08-30-2007 at 10:41 AM.. Reason: add comments |
|
|||||
|
Quote:
when iterating through an array 'sum' with the index of 'i', the order of the iteration is indeterminant, i.e. don't assume that 'i' will go from '1' to 'NF'. |
|
||||
|
Quote:
So my script so far is: cat $1 | grep "results" | grep "get numbers" | xargs -n $2 It is somewhat more advanced then the command above, but this is only so you get the whole picture. It produces columns with values from files named $1 and the numbers of columns are determined by $2. Now, since $2 is a variable I don't know how many columns there is going to be. It is not going to be many, lets say around 2-10 should suffice. I need, as I previous stated go through each column adding them and then dividing them with the number of elements in each column. So if the output from the following command above is: 1 4 2 5 3 6 4 7 5 8 The result should be: 3 6 Which is the average of each of the columns. I've done something like this, but it doesn't seem to work, while [ $j > 0 ] do cat list | awk '{sum+=$i} END {print sum/NR}' i=$[$i+1] j=$[$j-1] done awk seems to have problem with $i. But I need this to be a variable but awk says: awk: illegal field $(), name "i" input record number 1, file source line number 1 Last edited by baghera; 08-30-2007 at 02:45 PM.. |
|
||||
|
I solved the problem:
Code:
i="1"
j=$2
while [ "$j" -gt 0 ]
do
echo "$data" | awk -v k=$i '{sum+=$k} END {print sum/NR}'
i=$[$i+1]
j=$[$j-1]
done
Code:
data='cat myList | xargs -n $2' |
| Sponsored Links | ||
|
|