gpt4 book ai didi

bash - 在 UNIX shell 中实现 `sumproduct`

转载 作者:行者123 更新时间:2023-11-29 09:08:51 25 4
gpt4 key购买 nike

我有一些来自脚本 thescript 的输出,它显示为:

202 1 0 1 0 0 0

现在我想根据 ${SUM_MASK} 的值有选择地用 awk 对这个数字求和:

SUM_MASK=1,1,0,0,0,0,0

我想要这样的东西:

thescript | awk <SOMETHING>

其中 thescript 的每个数字输出与 ${SUM_MASK} 中的相应数字相乘,得到:

203

由于:203 = 202 * 1 + 1 * 1 + 0 * 0 + 1 * 0 + 0 * 0 + 0 * 0 + 0 * 0

这类似于电子表格软件中的 sumproduct 函数。

以下代码片段可以解决问题,但我想避免使用进程替换:

SUM_MASK="1,1,0,0,0,0,0"; paste <(thescript) <(echo ${SUM_MASK} | tr ',' '\n') | awk '{ SUM += $1 * $2 } END { print SUM }'

和命名管道:

SUM_MASK="1,1,0,0,0,0,0"; mkfifo fA; mkfifo fB; thescript > fA & echo ${SUM_MASK} | tr ',' '\n' > fB & paste fA fB | awk '{ SUM += $1 * $2 } END { print SUM }' > result.text; rm -f fA fB

我怎样才能做到这一点?

最佳答案

echo "202 1 0 1 0 0 0" |
awk -v summask="1,1,0,0,0,0,0" '
BEGIN {split(summask, mask, /,/)}
{ sumproduct=0
for (i=1; i<=NF; i++) {
sumproduct += $i * mask[i]
}
print sumproduct
}
'
203

关于bash - 在 UNIX shell 中实现 `sumproduct`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023455/

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