我有下面的awk减缩程序,它在计算键值对中的值时运行良好。
# !/bin/awk -f
BEGIN {FS="\t";
}
{ A[$1]+=$2;
}
END {
for(i in A)
{printf("%s\t %d\n" ,i ,A[i])}
}
上面的减速机工作得很好,有没有什么优化的方法来写。。。?
输入:
APPLE 1
APPLE 1
1
ORANGE 1
ORANGE 1
MANGO 1
BANANA 1
1
1
1
ORANGE 1
1
APPLE 1
BANANA 1
输出:
APPLE 3
BANANA 2
MANGO 1
ORANGE 3
5
2条答案
按热度按时间qoefvg9y1#
取决于优化的定义,当前解决方案的局限性在于它必须在关联数组中维护整个结果集。另一种方法是将字段1与前一个值进行比较,如果匹配则更新计数,否则输出前一个值和计数。使用此方法,您可以在运行时输出结果。我不知道使用此算法的性能代价,但正如我前面所说,它没有内存限制:
wfauudbj2#
当然,根据您的输入数据和实际需要的优化类型,可能会有其他选择。