我如何在表格中获得每个组的平均值 - 在bash中抢先(尴尬?

发布于 2025-02-13 08:14:18 字数 1456 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假面具 2025-02-20 08:14:18

awk中进行此操作非常简单:

awk '{sum[$1]+=$2; count[$1]++} END {for(key in sum) print key ":  " sum[key]/count[key]}' input_file

示例文件的输出:

grp1: 2
grp2: 6.5
grp4: 9

  • {sum [sum [$ 1]+= $ 2;计数[$ 1] ++}:对于输入文件的每一行,我们使用2个关联数组

    • 计数存储遇到第一字段的时间
    • sum存储此特定组的第二个字段的每个值的总和
  • 结束{for(ke in sum)打印键“:” sum [sum [key]/count [key]}> :什么时候文件已经完成解析,我们打印每个组以及此组的sum/Count

It's fairly simple to do this in awk :

awk '{sum[$1]+=$2; count[$1]++} END {for(key in sum) print key ":  " sum[key]/count[key]}' input_file

Output for your sample file :

grp1: 2
grp2: 6.5
grp4: 9

Explanation :

  • {sum[$1]+=$2; count[$1]++} : for every line of your input file, we use 2 associative arrays

    • count that stores the number of time the 1st field is encountered
    • sum that stores the sum of every value for the 2nd field for this specific group
  • END {for(key in sum) print key ": " sum[key]/count[key]} : when your file has finished parsing, we print every group, as well as the sum/count for this group

小伙你站住 2025-02-20 08:14:18

给定:

cat file
grp1 1
grp1 3
grp2 5
grp2 8
grp4 9
    

awk '{d[$1]+=$2; cnt[$1]++} END{for (e in d) print e, d[e] / cnt[e]}' file

打印:

grp1 2
grp2 6.5
grp4 9

如果您希望它们全部都是浮点呈现:

awk '{d[$1]+=$2; cnt[$1]++} END{for (e in d) printf("%s %0.2f\n", e, d[e] / cnt[e])}'

打印:

grp1 2.00
grp2 6.50
grp4 9.00

知道awk中的关联阵列不维护顺序,因此grpx可能会从文件中的顺序变化。

Given:

cat file
grp1 1
grp1 3
grp2 5
grp2 8
grp4 9
    

awk '{d[$1]+=$2; cnt[$1]++} END{for (e in d) print e, d[e] / cnt[e]}' file

Prints:

grp1 2
grp2 6.5
grp4 9

Of if you want them all to be floating point presentation:

awk '{d[$1]+=$2; cnt[$1]++} END{for (e in d) printf("%s %0.2f\n", e, d[e] / cnt[e])}'

Prints:

grp1 2.00
grp2 6.50
grp4 9.00

Know that associative arrays in awk do not maintain order so the grpX may change from the order found in the file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文