不是母语人士所以最好的解释方法就是举例说明我必须做的事情。
name1:15
name2:20
name1:8
name3:30
现在这是我从文件greping时获得的输出的一个简短示例。 现在我不确定如何处理这些数字的总和,以便最终的解决方案是
name1:23
name2:20
name3:30
有几种方法可以解决这个问题,我目前看到的唯一方法是涉及阵列,我被告知这不是在Bash中思考的最佳方式。
感谢您的帮助,对不起,如果之前已经提出问题。
答案 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