【发布时间】:2020-01-22 22:28:30
【问题描述】:
我的 infile.txt 文件包含多个列和行,如下所示:
infile.txt
2020 01 13 00 28.5833 77.2000 979 0 282.6 284.3 285.4 0 0
2020 01 13 00 28.5833 77.2000 925 469.578 290.4 296.9 297.7 3.6 5.1
2020 01 13 00 28.5833 77.2000 909 613.987 290.8 298.8 299.5 4.7 3.3
2020 01 13 00 28.5833 77.2000 850 1169.4 288 301.6 303.1 9.3 0
2020 01 13 00 28.5833 77.2000 700 2776.28 279 308.9 309.6 0 7.1
2020 01 13 00 28.5833 77.2000 500 5561.01 258.1 314.6 314.8 14.2 11.9
并且,我想执行一些基于列的计算,如下所示:
awk '{R=0; if($12) R=(('$g'/'$theta_vs')*($11-'$theta_vs')*($8-'$z_s'))/(($12^2)+($13^2)); print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,R }' > test.txt
这项工作完美,并在 $12!=0 时保持 R=0,但当 $12==0 时提供输出值 0,如下所示:
输出文件:
2020 01 13 00 28.5833 77.2000 979 0 282.6 284.3 285.4 0 0 0
2020 01 13 00 28.5833 77.2000 925 469.578 290.4 296.9 297.7 3.6 5.1 5.08926
2020 01 13 00 28.5833 77.2000 909 613.987 290.8 298.8 299.5 4.7 3.3 9.01363
2020 01 13 00 28.5833 77.2000 850 1169.4 288 301.6 303.1 9.3 0 8.21755
2020 01 13 00 28.5833 77.2000 700 2776.28 279 308.9 309.6 0 7.1 0
2020 01 13 00 28.5833 77.2000 500 5561.01 258.1 314.6 314.8 14.2 11.9 16.3555
当 $12 && $13 都为 0 时,我想保持 R=0。
我该怎么做?
谢谢
【问题讨论】:
-
不要使用取消引用来访问
awk中的shell 变量。使用-v选项将它们转换为 awk 变量。 -
我有一个超过 500 行的脚本,这些变量被频繁使用,并且这些变量的值每次都不同。因此,我保留了这些线的外部以避免混淆。
-
awk -v g=$g -v theta_vs=$theta_vs有什么令人困惑的地方?