本文介绍了awk 列的中位数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 AWK 计算一列数值数据的中位数?

How can I use AWK to compute the median of a column of numerical data?

我能想到一个简单的算法,但我似乎不会编程:

I can think of a simple algorithm but I can't seem to program it:

到目前为止我所拥有的是:

What I have so far is:

sort | awk 'END{print NR}'

这给了我列中元素的数量.我想用它来打印某一行 (NR/2).如果 NR/2 不是整数,则向上取整为最接近的整数,即中位数,否则取 (NR/2)+1 的平均值和 (NR/2)-1.

And this gives me the number of elements in the column. I'd like to use this to print a certain row (NR/2). If NR/2 is not an integer, then I round up to the nearest integer and that is the median, otherwise I take the average of (NR/2)+1 and (NR/2)-1.

推荐答案

这个 awk 程序假设一列数字排序的数据:

This awk program assumes one column of numerically sorted data:

#/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

这篇关于awk 列的中位数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-26 10:38