我需要计算每个提供商的每个连接数 ,连接在第一列最后一个提供者,最终输出必须是每个操作符的总和
15 48502416383, orange:
2 48502416400, orange:
1 48601130989, plus:
3 48601131238, plus:
1 48782988324, plus:
4 48500182073, orange:
4 48694480239, era:
7 48697044484, orange:
4 48783915134, orange:
5 48512807390, orange:
11 48602570756, era:
12 48504126777, orange:
12 48507000833, orange:
18 48604089990, era:
19 48607629812, orange:
19 48880458754, era:
20 48515114454, orange:
29 48604089930, era:
31 48602240259, era:
37 48605110152, plus:
50 48608646173, era:
74 48783937132, era:
它应该看起来像这样
plus 42
orange 100
era 236
答案 0 :(得分:4)
awk
喜欢这些东西:
awk '{a[$3]+=$1} END {for (i in a) print i, a[i]}' file
它返回:
orange: 100
plus: 42
era: 236
这将总和存储在数组a[]
中,作为索引的第三列。文件完全处理完毕后,在END
块中,它会遍历阵列打印结果。
要摆脱冒号:
,您可以使用(感谢Cyrus for the recommendation):
awk -F"[ :]" '{a[$3]+=$1} END {for (i in a) print i, a[i]}' a
它返回:
plus 42
orange 100
era 236
通过说-F"[ :]"
,我们指出字段分隔符可以是空格(默认值)或冒号。这样,第3列将只是orange
,而不是orange:
。