linux - 计算具有多列数据的文本文件的中值和平均值

标签 linux bash unix math awk

我有一个包含多列数据的文件。

我需要计算两列的中位数和平均值。

输入:

67 65
56 43
87 87
90 65
95 34
87 76
85 65
87 89
73 34
72 56
98 33
95 84
84 79

期望的输出:

67 65 AVERAGE MEDIAN
56 43 AVERAGE MEDIAN
87 87 AVERAGE MEDIAN
90 65 AVERAGE MEDIAN
95 34 AVERAGE MEDIAN
87 76 AVERAGE MEDIAN
85 65 AVERAGE MEDIAN
87 89 AVERAGE MEDIAN
73 34 AVERAGE MEDIAN
72 56 AVERAGE MEDIAN
98 33 AVERAGE MEDIAN
95 84 AVERAGE MEDIAN
84 79 AVERAGE MEDIAN

我试过了

cat master | awk 'BEGIN {c = 0; sum = 0;} $1 ~ /^[0-9]*(\.[0-9]*)?$/ {a[c++] = $1; sum += $1;} END {avg = sum / c; if( (c % 2) == 1 ) {median = a[ int(c/2) ];} else {median = ( a[c/2] + a[c/2-1] ) / 2;} OFS="\t"; print avg, median;}' master

这只适用于一列数据。

最佳答案

对于两个数字,平均值等于中位数。

awk '{print $0 " " ($1+$2)/2 " " ($1+$2)/2}' file

输出:

67 65 66 66
56 43 49.5 49.5
87 87 87 87
90 65 77.5 77.5
95 34 64.5 64.5
87 76 81.5 81.5
85 65 75 75
87 89 88 88
73 34 53.5 53.5
72 56 64 64
98 33 65.5 65.5
95 84 89.5 89.5
84 79 81.5 81.5

关于linux - 计算具有多列数据的文本文件的中值和平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31523179/

相关文章:

c - 如何保护和取消保护单字节内存?

android - 编译 Android 框架 (AOSP)

C/UNIX 从输入读取(受字符计数和超时限制)

javascript - 如何在 openSUSE 上使用 NGINX 或 Apache2 将端口 80 重新路由到 localhost :3000 so I can run my Node. js 应用程序

bash - 如何在VIM编辑模式下为BASH定义自定义 `textwidth`

linux - 期望脚本输出

linux - 如何在带有空格的目录上使用查找?

c++ - 对某些 UNIX 代码有疑问吗?

c++ - Nodejs 和 UNIX 新手 : run node command in a cpp program

c++ - CMake find_* 不搜索子目录