我有一个文件。
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 组合。
最后,使用x
as 变量遍历数组来遍历数组,并首先使用 打印$1FS$2
值及其各自的总和seen[x]
。
这in
将是您的输入文件名。我们NR>1
正在跳过标题行右埃科德氮数=1 NR>1
。