gpt4 book ai didi

Bash - 根据列在行中添加值

转载 作者:行者123 更新时间:2023-11-29 09:14:01 26 4
gpt4 key购买 nike

我的 csv 文件中的第二列有重复项。我想根据这些重复项添加第 1 列中的关联值。

示例 csv :

56,  cc=DK
49, cc=US
34, cc=GB
32, cc=DE
32, cc=NZ
31, cc=DK
31, cc=GB
31, cc=GB

示例结果:

96,  cc=GB # where 96 = 34+31+31
87, cc=DK # where 87 = 56+31
32, cc=DE
32, cc=NZ

最佳答案

您可以在 awk 中使用关联数组:

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

为了可读性对其进行扩展,并使用 sum/key 而不是 s/k:

{                                 # Do for each line.
sum[$2] += $1 # Add first field to accumulator,
# indexed by second field.
# initial value is zero.
}
END { # Do this bit when whole file processed.
for (key in sum) # For each key like cc=US:
print sum[key] ", " key # Output the sum and key.
}

这是在我的盒子上运行的示例:

pax$ echo;echo '56,  cc=DK
49, cc=US
34, cc=GB
32, cc=DE
32, cc=NZ
31, cc=DK
31, cc=GB
31, cc=GB' | awk '{s[$2]+=$1}END{for(k in s)print s[k]", "k}'

32, cc=DE
96, cc=GB
32, cc=NZ
49, cc=US
87, cc=DK

尽管第一列的形式是 999,(注意末尾的逗号),但它仍然有效,只是因为 awk,在计算字符串时数字上下文,仅使用在该上下文中有效的前缀。因此,45xyzzy 将变为 45,更重要的是,49, 变为 49

关于Bash - 根据列在行中添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com