使用gnuplot从文本文件中读取具有双精度浮点数的变量

时间:2014-06-04 15:22:34

标签: awk gnuplot

我有一个文本文件,包含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的是零!

如何提高精度以获得准确值?

1 个答案:

答案 0 :(得分:3)

这里的问题是awk被指示读取数字的明确方式。当精度被排除在格式说明符%.6f之外时,因此awk返回0.000000作为第二行第3列中的数字。您可以通过多种方式解决此问题:

  1. 使用更高精度的格式说明符:

    a_0 = system("awk 'NR == ".ii." { printf \"%.10f\", $3 }' ".datafile)

    请注意,awk中每个代码块的头部都隐式有一个布尔表达式,所以if语句在这里是多余的。

    < / LI>
  2. 完全避免在awk中进行数值转换:

    a_0 = system("awk 'NR == ".ii." { print $3 }' ".datafile)

  3. 通过设置OFMT

    来使用更高精度的转换

    a_0 = system("awk 'NR == ".ii." { print 0+$3 }' OFMT='%.10f' ".datafile)

    关于awk中数值转换的进一步讨论可以在this answer中看到我提出的类似问题。

  4. 在脚本结尾处运行print a_0的结果在所有情况下都是:

    -3.73e-08