Медиана столбца с awk
Как я могу использовать AWK для вычисления медианы столбца числовых данных?
Я могу представить простой алгоритм, но я не могу его запрограммировать:
Что я до сих пор:
sort | awk 'END{print NR}'
И это дает мне количество элементов в столбце. Я хотел бы использовать это для печати определенной строки (NR/2)
. Если NR/2
не является целым числом, тогда я округляется до ближайшего целого числа, и это медиана, иначе я беру среднее значение (NR/2)+1
и (NR/2)-1
.
Ответы
Ответ 1
Эта программа awk
принимает один столбец с числовыми сортированными данными:
#/usr/bin/env awk
{
count[NR] = $1;
}
END {
if (NR % 2) {
print count[(NR + 1) / 2];
} else {
print (count[(NR / 2)] + count[(NR / 2) + 1]) / 2.0;
}
}
Использование образца:
sort -n data_file | awk -f median.awk
Ответ 2
С awk
вам нужно сохранить значения в массиве и вычислить медианную в конце, если мы посмотрим на первый столбец:
sort -n file | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'
Конечно, для реального медианного вычисления сделайте округление, как описано в вопросе:
sort -n file | awk ' { a[i++]=$1; }
END { x=int((i+1)/2); if (x < (i+1)/2) print (a[x-1]+a[x])/2; else print a[x-1]; }'
Ответ 3
Этот ответ на основе AWK по аналогичному вопросу на unix.stackexchange.com дает те же результаты, что и Excel для расчета медианы.