我有一个包含两列的数据文件。我想找出第二列中的最大数据值,并将第二列的每个条目除以最大值。 (所以我将获得第二列
我尝试使用下面的命令:
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
. In awk
根据上下文,变量可以是字符串或数字。在字符串上下文中,>
比较字典顺序。我们想要一个数字比较。通过添加零$2
,我们正在消除所有疑虑并强迫awk
治疗$2
作为一个数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)