从bash变量中分割文本

问题描述 投票:2回答:1

我有一个包含数字组的变量。它看起来像这样:

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)具有任意长度。

我将如何分裂这些群体?

bash scripting
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.