我有一个文本文件,包含3列中的数据,如下所示:
0.0100000000 0.0058077299 -0.0000000288
0.0110000000 0.0075128707 -0.0000000373
0.0120000000 0.0093579693 -0.0000000465
我想从gnuplot中获取此文件中的变量并使用它们绘制图形:
我的确如下所示(例如:从第2行第3列中选择变量):
ii = 2
a_0 = system("awk '{ if (NR == " . ii . ") printf \"%f\", $3}' " .datafile)
a_0 = a_0+0.
但是写成a_0的是零!
如何提高精度以获得准确值?
答案 0 :(得分:3)
这里的问题是awk被指示读取数字的明确方式。当精度被排除在格式说明符%.6f
之外时,因此awk返回0.000000
作为第二行第3列中的数字。您可以通过多种方式解决此问题:
使用更高精度的格式说明符:
a_0 = system("awk 'NR == ".ii." { printf \"%.10f\", $3 }' ".datafile)
请注意,awk中每个代码块的头部都隐式有一个布尔表达式,所以if语句在这里是多余的。
< / LI>完全避免在awk中进行数值转换:
a_0 = system("awk 'NR == ".ii." { print $3 }' ".datafile)
通过设置OFMT
:
a_0 = system("awk 'NR == ".ii." { print 0+$3 }' OFMT='%.10f' ".datafile)
关于awk中数值转换的进一步讨论可以在this answer中看到我提出的类似问题。
在脚本结尾处运行print a_0
的结果在所有情况下都是:
-3.73e-08