在bash中,当B列具有相同内容时,如何将A列中的所有数字相加?

时间:2011-12-05 17:02:22

标签: bash shell awk

我的表看起来像这样:

11 wordA  
16 wordB 
17 wordC 
24 wordA 
25 wordB

如果该行上的字匹配,我想将数字相加,这样我就可以合并表格了。结果看起来应该是这样的:

35 wordA
41 wordB
17 wordC

非常感谢帮助!

(P.S。有没有办法用awk做到这一点?)

3 个答案:

答案 0 :(得分:7)

这是一个非常典型的awk类问题。执行此操作的awk脚本如下所示:

{ totals[$2] += $1 }

END {
  for (i in totals)
    print totals[i], i
}

第一节创建一个由第二列键入的总计关联数组。然后END块遍历数组并打印总数。

答案 1 :(得分:1)

在Bash 4(具有关联数组)中:

declare -A seen
while read -r num word
do
    [[ $word ]] && (( seen["$word"] += num ))
done < <(printf '%s\n' "${table[@]}")

for word in "${!seen[@]}"
do
    printf '%d %s\n' "${seen["$word"]}" "$word"
done

您可以根据需要将<(printf '%s\n' "${table[@]}")替换为<(some_command)filename

答案 2 :(得分:0)

将它传递给

awk '{s[$2]+=$1}END{ for(i in s) print s[i], i }'