2010-06-26 4 views
23

Кто-нибудь знает, как я могу вычислить среднее значение одного из этих столбцов (на 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 

Например: среднее значение (колонка 2)

+1

http://unix.stackexchange.com/questions/13731/is-there-a-way-to -get-the-min-max-median-and-average-of-a-list-of-numbers –

ответ

52

Awk:

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

Показания как:

  • Для каждой строки добавьте столбец 2 к переменной «total».
  • В конце файла напечатайте 'total', деленное на количество записей.
+0

... Или вы всегда можете использовать AWK конечно :) :) +1 – OscarRyz

+0

Отлично .. спасибо ... это просто и работает очень хорошо !! – Alucard

+0

@Porges: Как получить доступ к определенным интервалам: скажем, во втором столбце, я хочу найти среднее из элементов с 2 по 6? –

1

Вы можете использовать Python для того, доступна в Linux.

Если это происходит из файла, взгляните на это question, просто используйте float вместо этого.

Например:

#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() 

печать 14.38

Я просто включить данные в файле mean.txt, а не строка заголовка: "АСД"

+1

Моя первая мысль, вероятно, была бы также Python ... но сделать список здесь может быть слишком неэффективным, так как вам действительно нужна сумма и количество строк. (Кроме того, для удовольствия: 'open (" mean.txt ", 'r') как f: n, t = map (sum, zip (* ((1, float (line.split() [1])) для строки в f))); print t/n') –

0

David Zaslavsky для удовольствия:

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

Simple-r будет вычислить среднее с помощью следующей строки:

r -k2 mean file.txt 

во второй колонке. Он также может выполнять гораздо более сложный статистический анализ, поскольку он использует R environment для всего своего статистического анализа. Решение

3

Perl:

perl -lane '$total += $F[1]; END{print $total/$.}' file 

-a autosplits строку в массив @F, который индексируется, начиная с 0
$. является номер строки

Если поля разделены запятыми вместо пробелов:

perl -F, -lane '$total += $F[1]; END{print $total/$.}' file 

Чтобы распечатать среднее значение значения всех столбцов, назначить общее значение для массива @t:

perl -lane 'for $c (0..$#F){$t[$c] += $F[$c]}; END{for $c (0..$#t){print $t[$c]/$.}}' 

выход:

0 
0.485 
14.38 
1.74 
0.888333333333333 
77.27 
49.8266666666667 
39.91 
1.29833333333333 
434.131666666667 
Смежные вопросы