根据特定列的值打印总和

根据特定列的值打印总和

我有一个文件。

Name ID Savings
RK   1  10000
RS   2  10900
RK   1  1380
RS   2  10200

我想找到两个人(RK 和 RS)的总储蓄。所以我想要的预期结果是:

RK 1 11380  (i.e 10000 + 1380)
RS 2 21100  (i.e 10900 + 10200)

答案1

$ awk 'NR > 1 { s[$2] += $3; n[$2] = $1 } END { for (i in s) { print n[i], i, s[i] }}' file
RS 2 21100
RK 1 11380

我们使用两个数组,一个用于保存总和 ( s),另一个用于保存名称 ( n)。数组的索引是使用 ID 完成的(可能有几个人同名,所以我们将避免使用它作为索引)。

对于输入的每一行(不包括标题行),我们更新总和并存储名称。最后,我们检查保存的信息并将其打印出来。

答案2

用于awk

awk 'NR>1{seen[$1FS$2]+=$NF} END{for (x in seen) print x, seen[x]}' in

这是读取整个列#1 和列#2,并保持字段分隔FS符完整,即命名数组中的空白seen以及对$1FS$2最后一个字段值求和的每个 uniq 组合。

最后,使用xas 变量遍历数组来遍历数组,并首先使用 打印$1FS$2值及其各自的总和seen[x]

in将是您的输入文件名。我们NR>1正在跳过标题行埃科德数=1 NR>1

相关内容