我有一个包含数字组的变量。它看起来像这样:
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)具有任意长度。
我将如何分裂这些群体?
我会使用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