使用 awk 基于两个匹配字段的求和列
我似乎无法找到一个 awk 解决方案来完成这个简单的任务。我可以轻松地根据一个匹配字段 ($1) 对一列 ($3) 求和:
awk -F, '{array[$1]+=$3} END { for (i in array) {print i"," array[i]}}' datas.csv
现在,我如何根据两个字段执行此操作?比如说 1 美元和 2 美元?这是一个示例数据:
P1,gram,10
P1,tree,12
P1,gram,34
P2,gram,23
...
如果第一个和第二个字段匹配,我只需要对第 3 列求和。
感谢您的帮助!
I can't seem find an awk solution for this simple task. I can easily sum a column ($3) based on one matching field ($1) with :
awk -F, '{array[$1]+=$3} END { for (i in array) {print i"," array[i]}}' datas.csv
Now, how can I do that based on two fields ? Lets say $1 and $2 ? Here is a sample datas :
P1,gram,10
P1,tree,12
P1,gram,34
P2,gram,23
...
I simply need to sum column 3 if first and second fields match.
Thanx for any help !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
像这样
我的结果
编辑
由于OP需要逗号保留在输出中,我使用@yi_H的“逗号修复”编辑了上面的答案。
Like so
My result
EDIT
As the OP needs the commas to remain in the output, I edited the answer above using @yi_H's "comma fix".
对于需要较少内存但需要首先排序的解决方案(没有什么是免费的):
For a solution needing less memory, but needing sorting first (nothing is free):