我有一个文件,该文件在第一列中有名称,在第二列中有计数。它按名称排序。
dan 3355
dan 667
dan 889
frank 8
frank 99
frank 90
ian 9
我想组合所有相同的名称并输出每个名称的总数:
dan 4911
frank 197
ian 9
我知道我可以使用 uniq 来获取相同行的总数,但是如何保留数据中的计数?
您可以使用 awk 的关联数组:
awk '{arr[$1]+=$2;} END {for (i in arr) print i, arr[i]}' filename
使用 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}'