我有一个包含数字组的变量。看起来像这样:
foo 3
foo 5
foo 2
bar 8
bar 8
baz 2
qux 3
qux 5
...
我想拆分这些数据,以便一次可以处理一个“组”。我觉得通过某种方式实现循环是可以实现的。最终目标是取每个组的平均值,这样我就可以拥有:
foo 3.33
bar 8.50
baz 5.00
qux 4.00
...
这意味着采取行动已经实施,但是我已经提出来,因此可以了解上下文。
请务必注意,每个组(例如foo,bar,baz)的长度都是任意的。
我该如何拆分这些小组?
答案 0 :(得分:2)
我将使用awk
(这里使用GNU版本gawk
进行了测试,但我认为是可移植的)来进行收集和平均。作为coreutil,它几乎应该安装在任何安装bash
的计算机上。
# print_avg.awk
{
sums[$1] += $2
counts[$1] += 1
}
END {
for (key in sums)
print key , sums[key] / counts[key]
}
data.txt:
foo 3
foo 5
bar 8
bar 8
baz 2
qux 3
qux 5
运行方式:
$ awk -f print_avg.awk data.txt
foo 4
baz 2
qux 4
bar 8