Calculating average from files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Calculating average from files
# 1  
Old 11-19-2015
Calculating average from files

I have some files with the following contents.I would like to calculate average of fifth column. How can I do this with awk?

Code:
file1

cat 95.9    152 78.0    17.9
rat 67.1    153 36.5    30.6
dog 81.4    154 68.1    13.3
dog 92.0    155 55.5    36.5
rat 73.8    156 23.9    49.9
file2

rat    79.0     157  64.3   14.7
fish   67.7     158  4.9    62.8
goat   90.2     159 80.7    9.5
dog    130.8    160 25.1    105.7

desired output

cat    17.9
rat    31.73
dog    51.83
fish   62.8
goat   9.5

I used the following code to calculate average. But the output is wrong.
Code:
awk '{a[$1]+=$5}END {for (i in a) {print i,a[i];Total+=a[i]}; print "average - ", Total/NR}' *

Code:
rat 95.2
goat 9.5
fish 62.8
cat 17.9
dog 155.5
average -  37.8778

This User Gave Thanks to avina For This Post:
# 2  
Old 11-19-2015
Hello avina,

Welcome to forums, a special thanks to you for using code tags for commands/codes/Inputs you had used in your post. Could you please try following and let me know if this helps you.
Code:
awk 'FNR==NR{A[$1]+=$5;B[$1]++;next} {A[$1]+=$5;B[$1]++} END{for(i in A){print i OFS A[i]/B[i]}}' File1 File2

Output will be as follows.
Code:
cat 17.9
dog 51.8333
rat 31.7333
fish 62.8
goat 9.5

Thanks,
R. Singh

Last edited by RavinderSingh13; 11-19-2015 at 02:14 AM.. Reason: Added a welcome note for user into forums.
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 11-19-2015
Hi Singh,

Thank you very much for your help.
# 4  
Old 11-19-2015
Code:
awk 'BEGIN{
FS="[ ]+"
}
{
arr[$1]+=$5
brr[$1]+=1
}
END{
	for(i in arr){
		avg=arr[i]/brr[i]
		print i,avg
	}
}' a b

Moderator's Comments:
Mod Comment Your repeated refusal to use CODE tags as required by forum rules has set your account into read-only mode for a day.

Please review the rules you agreed to when you joined the UNIX & Linux Forums.

Continued refusal to follow the rules may result in your permanent suspension from this forum.

Last edited by Don Cragun; 11-19-2015 at 06:05 PM.. Reason: ADD CODE tags again!
# 5  
Old 11-19-2015
Quote:
Originally Posted by avina
I have some files with the following contents.I would like to calculate average of fifth column. How can I do this with awk?

Code:
file1

cat 95.9    152 78.0    17.9
rat 67.1    153 36.5    30.6
dog 81.4    154 68.1    13.3
dog 92.0    155 55.5    36.5
rat 73.8    156 23.9    49.9
file2

rat    79.0     157  64.3   14.7
fish   67.7     158  4.9    62.8
goat   90.2     159 80.7    9.5
dog    130.8    160 25.1    105.7

desired output

cat    17.9
rat    31.73
dog    51.83
fish   62.8
goat   9.5

I used the following code to calculate average. But the output is wrong.
Code:
awk '{a[$1]+=$5}END {for (i in a) {print i,a[i];Total+=a[i]}; print "average - ", Total/NR}' *

Code:
rat 95.2
goat 9.5
fish 62.8
cat 17.9
dog 155.5
average -  37.8778

Saying "the output is wrong" doesn't help us much. What, in the output you are getting, is wrong? With your sample input, what output are you trying to get? The output you said you want does not show the sum of values for each animal nor the average value for each animal (except for animals that only appear in one of your input files). Are you trying to prints animal sums in the output, or animal averages?

What values are you trying to average in your final line of output? Are you trying to calculate the average of all of the input values (which seems to be what your code is doing)? Are you trying to calculate the average of the averages for each animal? Are you trying to calculate the average of the sums for each animal?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Python Script Calculating Average

Can anyone explain what each line of the code does and how it works? I have no experience with python so I am not sure how the arrays and such work. I found this code while looking through the forums. f = open("exams","r") l = f.readline() while l: l = l.split(" ") values = l ... (22 Replies)
Discussion started by: totoro125
22 Replies

2. UNIX for Dummies Questions & Answers

Calculating average

Hi I have file like below 111,victor,48,12,36 342,Peter,54,58,30 476,Scott,25,36,48 567,Patty,74,17,95 I have written below code to calcualte avereage for every id Victor = 48+12+36/3 #!/bin/ksh /usr/xpg4/bin/awk ' BEGIN {FS=","} {sum=0; n=0;i=3 (1 Reply)
Discussion started by: stew
1 Replies

3. Shell Programming and Scripting

Calculating the average of scores

Hi I have 2 files file1 aac 23 25 aac 87 90 aac 33 67 file2 23 0.9 24 0.8 25 0.4 ........ 67 0.55 ........ I want to get output as (11 Replies)
Discussion started by: anurupa777
11 Replies

4. Shell Programming and Scripting

Calculating average with awk

I need to find the average from a file like: data => BW:123 M:30 RTD:0 1 0 1 0 0 1 1 1 1 0 0 1 1 0' data => BW:123 N:30 RTD:0 1 0 1 0 0 1 1 1 1 0 0 1 1 0' data => BW:123 N:30 RTD:0 1 0 1 0 0 1 1 1 1 0 0 1 1 0' data => BW:123 N:30 RTD:0 1 0 1 0 0 1 1 1 1 0 0 1 1 0' data => BW:123 N:30 RTD:0 1... (4 Replies)
Discussion started by: Slagle
4 Replies

5. Shell Programming and Scripting

Calculating average for every Nth line in the Nth column

Is there an awk script that can easily perform the following operation? I have a data file that is in the format of 1944-12,5.6 1945-01,9.8 1945-02,6.7 1945-03,9.3 1945-04,5.9 1945-05,0.7 1945-06,0.0 1945-07,0.0 1945-08,0.0 1945-09,0.0 1945-10,0.2 1945-11,10.5 1945-12,22.3... (3 Replies)
Discussion started by: ncwxpanther
3 Replies

6. Shell Programming and Scripting

Calculating average of 100 different files of same size

Hey guys..... I have many files (lets say 100 or more) of same size, and I want to create a new output file and calculate the average of first row fifth column in all files and print it in first row of output file, then 2nd row fifth col in all 100 files and print it in 2nd row of output... (1 Reply)
Discussion started by: CAch
1 Replies

7. UNIX for Dummies Questions & Answers

Calculating weighted average

Dear all, i have 200 values in a file. How can i calculate a weighted average and output into a new file avg.dat? INPUT: file1.dat 1.3453 2.434 2.345 ..... OUTPUT: avg.dat file1: 1.762 Thanks. Po (3 Replies)
Discussion started by: chen.xiao.po
3 Replies

8. UNIX for Dummies Questions & Answers

Calculating average

Hi, i have 12 float variables in a bash file and i want to calculate the average of them. Can any body help? (6 Replies)
Discussion started by: limadario
6 Replies

9. UNIX for Dummies Questions & Answers

Calculating the Number of Rows and Average

Hi All I like to know how can we calculate the number of rows and the average of the values present in the file. I will not know what will be the rowcount, which will be dynamic in nature of the file. eg. 29 33 48 30 28 (6 Replies)
Discussion started by: pk_eee
6 Replies

10. Shell Programming and Scripting

Calculating the average

This is the cronjob ---------------------- root@a7germ:/home/paxtemp > crontab -l|grep test 57 * * * * /home/paxtemp/test_1.sh 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/paxtemp/test.sh root@a7germ:/home/paxtemp > This is the contents of test.sh script... (2 Replies)
Discussion started by: kekanap
2 Replies
Login or Register to Ask a Question