Bash脚本:按唯一名称{name:number}对列进行求和

时间:2017-04-27 09:43:47

标签: bash

不是母语人士所以最好的解释方法就是举例说明我必须做的事情。

  

name1:15

     

name2:20

     

name1:8

     

name3:30

现在这是我从文件greping时获得的输出的一个简短示例。 现在我不确定如何处理这些数字的总和,以便最终的解决方案是

  

name1:23

     

name2:20

     

name3:30

有几种方法可以解决这个问题,我目前看到的唯一方法是涉及阵列,我被告知这不是在Bash中思考的最佳方式。

感谢您的帮助,对不起,如果之前已经提出问题。

2 个答案:

答案 0 :(得分:1)

awk 'NF{a[$1]+=$NF} END{for(i in a)print i, a[i]}' File

这适用于所有非空行。

示例:

$ 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

答案 1 :(得分:0)

对先前的答案表示歉意..我没有正确地阅读你的问题(还没有足够的咖啡)。

这可能会做你想要的。

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