AWK:基于另一列中的条目的列中的值的总和

AWK:基于另一列中的条目的列中的值的总和

我想根据同一个表第一列中给出的条目对下表第三列中列出的数值进行求和。表内容如下:

John|Login|2
Mary|Login|10
Mary|Payroll|100
John|Login|200
John|Logout|10
Mary|Payroll|10

预期结果如下:

John|Login|202
John|Logout|10
Mary|Login|10
Mary|Payroll|110

我怎样才能awk得到这个输出?

答案1

这个命令对我有用。它应该适合你:

     awk -F '|' '{a[$1"|"$2"|"]+= $3} END{for (i in a) print i, a[i]}' filename | sort -k 1,1
John|Login| 202
John|Logout| 10
Mary|Login| 10
Mary|Payroll| 110

答案2

如果您awk安装了 GNU,则不必使用其他工具sort来正确设置顺序,但您可以自行完成awk。您可以通过设置特殊变量来设置数组遍历的方式PROCINFO["sorted_in"]。看使用预定义的数组扫描顺序gawk

不过,就您而言,您可以将其设置为按索引升序排序

awk -vFS="|" -vOFS="|"  '{ 
                             primaryKey=($1 FS $2)
                         }{ 
                             db[primaryKey]+=$3; next 
                         } END { 
                             PROCINFO["sorted_in"] = "@ind_str_asc"
                             for(key in db) 
                                 print key, db[key] 
                         }' file

相关内容