我想根据同一个表第一列中给出的条目对下表第三列中列出的数值进行求和。表内容如下:
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