gpt4 book ai didi

optimization - 如何在 awk 中编写优化的 reducer

转载 作者:可可西里 更新时间:2023-11-01 15:39:53 24 4
gpt4 key购买 nike

我有下面的 awk reducer 程序,它在计算键值对中的值时运行良好。

#!/bin/awk -f

BEGIN {FS="\t";
}
{ A[$1]+=$2;
}
END {
for(i in A)
{printf("%s\t %d\n" ,i ,A[i])}
}

上面的reducer效果很好,有没有什么优化的写法...?

输入:

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

最佳答案

取决于您对优化的定义 - 您当前的解决方案是有限的,因为它必须在关联数组中维护整个结果集。另一种方法是将字段 1 与先前的值进行比较,如果它们匹配则更新计数,否则输出先前的值和计数。使用此方法,您可以随时输出结果。我不知道使用此算法的性能成本,但正如我之前所说,它不受内存限制:

BEGIN {
FS = "\t";
OFS = "\t";
}
{
if ($1 != prev) {
if (prev != "") { print prev, count;}
prev=$1;
count=0;
}
count += $2
}
END {
print prev, count
}

关于optimization - 如何在 awk 中编写优化的 reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com