gpt4 book ai didi

awk - 使用该列的最大值标准化列数据

转载 作者:行者123 更新时间:2023-12-04 14:18:31 24 4
gpt4 key购买 nike

我有一个包含两列的数据文件。我想从第二列中找出最大数据值并将第二列的每个条目除以最大值。 (所以我将获得第二列 <= 1.00 中的所有条目)。

我尝试使用以下命令:

awk 'BEGIN {max = 0} {if ($2>max) max=$2} {print  ($2/max)}' angleOut.dat

但我收到如下错误消息。
awk: (FILENAME=angleOut.dat FNR=1) fatal: division by zero attempted

注意:第二列中有一些数据为零值。但是当零值除以最大值时,我应该得到零,但是我得到了如上的错误。

我能得到任何帮助吗?

提前谢谢了。

最佳答案

让我们将此作为示例输入文件:

$ cat >file
1 5
2 2
3 7
4 6

这个 awk 脚本将规范化第二列:
$ awk 'FNR==NR{max=($2+0>max)?$2:max;next} {print $1,$2/max}' file file
1 0.714286
2 0.285714
3 1
4 0.857143

此脚本读取输入 file两次。第一次,它找到最大值。第二次是打印第二列标准化的行。

三元声明

考虑:
max=($2+0>max)?$2:max

这是 if-then-else 语句的紧凑形式。 “如果”部分是 $2+0>max .如果计算结果为真,则 ? 后面的值分配给 max .如果为false,则 :后面的值分配给 max .
if 的更明确的形式声明也很有效。

另外,请注意咒语 $2+0 .在 awk根据上下文,变量可以是字符串或数字。在字符串上下文中, >比较字典顺序。我们想要一个数字比较。通过在 $2 上加零,我们正在消除所有怀疑和强制 awk治疗 $2作为一个数字。

关于awk - 使用该列的最大值标准化列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29003301/

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