使用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
我有数据集看起来:
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