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

Calculate minimum and maximum value in the same rows usign awk

我有数据集看起来:

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

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

我的脚本:

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

感谢您的任何建议。

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

扩展您的代码:

$ cat foo.awk
{
    v[]+= 
    n[]++
    if(min[]>||min[]=="") 
        min[]=
    if(max[]<) 
        max[]= 
}
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

这段代码应该很容易阅读

$ awk       '{k=; v=; 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