views:

60

answers:

3

Hello every one... Anyone know how can I calculate the mean of one these columns (on linux)??

sda               2.91    20.44    6.13    2.95   217.53   186.67    44.55     0.84   92.97
sda               0.00     0.00    2.00    0.00    80.00     0.00    40.00     0.22  110.00 
sda               0.00     0.00    2.00    0.00   144.00     0.00    72.00     0.71  100.00 
sda               0.00    64.00    0.00    1.00     0.00     8.00     8.00     2.63   10.00
sda               0.00     1.84    0.31    1.38    22.09   104.29    74.91     3.39 2291.82 
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00  

For example: mean(column 2)

Thanks in advance...

+1  A: 

You can use python for that, is available in Linux.

If that comes from a file, take a look at this question, just use float instead.

For instance:

#mean.py 
def main():
    with open("mean.txt", 'r') as f:
        data = [map(float, line.split()) for line in f]

    columnTwo = []
    for row in data:
        columnTwo.append( row[1] )

    print  sum(columnTwo,0.0) / len( columnTwo )



if __name__=="__main__":
    main()

Prints 14.38

I just include the data in the mean.txt file, not the row header: "sda"

OscarRyz
My first thought would probably have been Python as well... but making the list might be overly inefficient here, since you only really need the sum and the number of lines. (Also, for the fun of it: `with open("mean.txt", 'r') as f: n,t = map(sum, zip(*((1, float(line.split()[1])) for line in f))); print t/n`)
David Zaslavsky
+8  A: 

Awk:

awk '{ total += $2 } END { print total/NR }' yourFile.whatever

Read as:

  • For each line, add column 2 to a variable 'total'.
  • At the end of the file, print 'total' divided by the number of records.
Porges
...Or you can always use AWK of course :) :) +1
OscarRyz
Great.. thanks... it's simple and works really well!!
Alucard
A: 

David Zaslavsky for the fun of it:

with open("mean.txt", 'r') as f: 
    n,t = map(sum, zip(*((1, float(line.split()[1])) for line in f)))
print t/n
OscarRyz