我有一个文件在第一列中有一个名字,在第二列中有一个数字。它按名称排序。
dan 3355
dan 667
dan 889
frank 8
frank 99
frank 90
ian 9
我想组合所有相同的名称并输出每个名字的总数:
dan 4911
frank 197
ian 9
我知道我可以使用uniq来获取相同行的总数,但是如何保留我在数据中的计数呢?
答案 0 :(得分:5)
您可以使用awk的关联数组:
awk '{arr[$1]+=$2;} END {for (i in arr) print i, arr[i]}' filename
答案 1 :(得分:1)
使用awk的关联存储器并不能保证名称将以与输入相同的顺序出现在输出中(并且对于大型数据集可能是内存效率低下的)。
请改用以下内容
awk '(NR==1){oldname=$1;s=$2;next};
(oldname == $1){s=s+$2;next};
{print oldname, s;oldname=$1s=$2;next}
END{print oldname,s}'