gpt4 book ai didi

awk - 计算任意列数的百分比

转载 作者:行者123 更新时间:2023-12-02 15:03:23 27 4
gpt4 key购买 nike

鉴于此示例输入:

ID     Sample1     Sample2      Sample3
One 10 0 5
Two 3 6 8
Three 3 4 7

我需要使用 AWK 生成此输出:

ID    Sample1 Sample2 Sample3
One 62.50 0.00 25.00
Two 18.75 60.00 40.00
Three 18.75 40.00 35.00

这就是我解决这个问题的方法:

function percent(value, total) {
return sprintf("%.2f", 100 * value / total)
}
{
label[NR] = $1
for (i = 2; i <= NF; ++i) {
sum[i] += col[i][NR] = $i
}
}
END {
title = label[1]
for (i = 2; i <= length(col) + 1; ++i) {
title = title "\t" col[i][1]
}
print title
for (j = 2; j <= NR; ++j) {
line = label[j]
for (i = 2; i <= length(col) + 1; ++i) {
line = line "\t" percent(col[i][j], sum[i])
}
print line
}
}

这在 GNU AWK 中运行良好(Linux 中的 awk,BSD 中的 gawk),但在 BSD AWK 中则不然,我收到此错误:

$ awk -f script.awk sample.txt
awk: syntax error at source line 7 source file script.awk
context is
sum[i] += >>> col[i][ <<<
awk: illegal statement at source line 7 source file script.awk
awk: illegal statement at source line 7 source file script.awk

问题似乎出在多维数组上。我想让这个脚本也能在 BSD AWK 中工作,所以它更便携。

有没有办法改变它以使其在 BSD AWK 中工作?

最佳答案

尝试使用伪二维形式。而不是

col[i][NR]

使用

col[i,NR]

这是一个一维数组,关键是连接的字符串:i SUBSEP NR

关于awk - 计算任意列数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623651/

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