我有一个包含多列数据的文件。
我需要计算两列的中位数和平均值。
输入:
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/