使用awk计算相同行中的最小值和最大值

时间:2016-09-19 13:32:07

标签: bash awk max average min

我有数据集外观:

A 10
A 12
A 13
B 10
B 25
B 66
B 80
C 2
C 3

我能够使用每个相同行的AWK平均值进行计算(使用数组)。我想在脚本中添加最小值和最大值。有什么想法吗?

我的剧本:

awk -v OFS="\t" '{v[$1]+=$2; n[$1]++}END {for (l in n) {print l "\t" v[l] / n[l]}}' > out.txt

感谢您的任何建议。

3 个答案:

答案 0 :(得分:2)

这段代码读起来应该是微不足道的

$ awk       '{k=$1; v=$2; sum[k]+=v; count[k]++} 
  !(k in min){min[k]=max[k]=v} 
     min[k]>v{min[k]=v} 
     max[k]<v{max[k]=v} 
          END{for(k in sum) print k,min[k],max[k],sum[k]/count[k]}' file |
  column -t

A  10  13  11.6667
B  10  80  45.25
C  2   3   2.5

答案 1 :(得分:1)

扩展您的代码:

$ cat foo.awk
{
    v[$1]+=$2 
    n[$1]++
    if(min[$1]>$2||min[$1]=="") 
        min[$1]=$2
    if(max[$1]<$2) 
        max[$1]=$2 
}
END {
    for (l in n) 
        print l, v[l] / n[l], min[l], max[l] 
}
$ awk -v OFS="\t" -f foo.awk foo.txt
A       11.6667 10      13
B       45.25   10      80
C       2.5     2       3

答案 2 :(得分:0)

一种方法可能是创建另外两个数组:一个用于最大值,另一个用于最小值。