Bash脚本:按唯一名称{name:number}统计列

Bash脚本:按唯一名称{name:number}统计列,bash,Bash,不是以英语为母语的人,所以最好的解释方法就是举例说明我必须做什么 姓名1:15 姓名2:20 姓名1:8 姓名3:30 现在,这是我从文件中变灰时得到的输出的一个简短示例。 现在我不知道如何处理这些数字的求和,所以最终的解决方案是 姓名1:23 姓名2:20 姓名3:30 有几种方法可以解决这个问题,而我目前看到的唯一方法是涉及数组的东西,我被告知这不是在Bash中考虑的最佳方法 感谢您的帮助,如果以前有人问过这个问题,我将表示歉意。对以前的回答表示歉意。。我没有正确地阅读你的问题(咖啡还不够)

不是以英语为母语的人,所以最好的解释方法就是举例说明我必须做什么

姓名1:15

姓名2:20

姓名1:8

姓名3:30

现在,这是我从文件中变灰时得到的输出的一个简短示例。 现在我不知道如何处理这些数字的求和,所以最终的解决方案是

姓名1:23

姓名2:20

姓名3:30

有几种方法可以解决这个问题,而我目前看到的唯一方法是涉及数组的东西,我被告知这不是在Bash中考虑的最佳方法


感谢您的帮助,如果以前有人问过这个问题,我将表示歉意。

对以前的回答表示歉意。。我没有正确地阅读你的问题(咖啡还不够)

这可能是你想要的

declare -A group_totals

while read -r group value ; do
  group_totals[$group]=$(( group_totals[group] + value ))
done < <(grep command_here input_file)

for group in "${!group_totals[@]}" ; do
  echo "$group: ${group_totals[$group]}"
done
declare-A组\u总计
而read-r组值;做
组总数[$group]=$((组总数[group]+值))
完成<
这将适用于所有非空行

例如:

$ cat File
name1: 15

name2: 20

name1: 8

name3: 30
样本:

$ awk 'NF{a[$1]+=$NF} END{for(i in a)print i, a[i]}' File
name1: 23
name2: 20
name3: 30

请发布你到目前为止在编写bash脚本方面取得的进展。哈哈,谁投票支持这个?之前已经被问过一百万次了……我相信OP希望通过第一列的值对分组进行求和,而不是返回一个全局sumAh是的,我今天早上在另一个星球上。:-)嗯,我会非常小心地使用<代码> /name/< /COD>测试而不作解释,我敢肯定这是占位符,OP实际上还有其他的值,最好考虑<代码>:< /C>作为定界符。这将为您提供一个防故障的解决方案。
$ awk 'NF{a[$1]+=$NF} END{for(i in a)print i, a[i]}' File
name1: 23
name2: 20
name3: 30