计算中值

问题描述 投票:0回答:1

我有一个包含数千行的文本文件,每行都有一个数值。值介于 -2.5 - 2.5 之间,一位小数。

我用这条线给出最低值、最高值、中值和平均值。

awk '{a[i++]=$0;s+=$0}END{print a[0],a[i-1],(a[int(i/2)]+a[int((i-1)/2)])/2,s/i}

它在其他方面很完美,但我想将中位数作为小数点后一位的小数。现在它返回一个整数。

你能帮我吗?

我对awk的了解非常有限。也许受过更多教育的人可以帮助我。

math awk median
1个回答
0
投票

我不确定你所说的“带有一位小数的十进制数”是什么意思(我无法将 0.1 变为 .1,如果这是你想要的),并且你需要确保你的 awk 版本支持 asort( ),但是这个(今天在 https://www.jdoodle.com/execute-awk-online 运行,应该是“NU AWK 5.1.1,API 版本为据我所知,3.1")应该有帮助:

代码:

BEGIN{
    highest=-2.6
    lowest=2.6
}{
    a[NR]=$0
    if($0>highest){highest=$0}
    if($0<lowest){lowest=$0}
    average=average+$0
}END{
    n=asort(a)
    if(n%2==1){median=a[(n+1)/2]}else{median=(a[n/2]+a[n/2+1])/2}
    printf("lowest=%f, highest=%f, average=%f, median=%1.1f\n",
    lowest, highest, average/NR, median)
}

输入(注意——不能有空行。):

-2.5
-1.4
0.1
-0.9
2.4
2.3
2.2

输出:

lowest=-2.500000, highest=2.400000, average=0.314286, median=0.1
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.