windows 在Gnuplot中调用AWK会产生两行额外的代码

dw1jzc5e  于 2023-11-21  发布在  Windows
关注(0)|答案(1)|浏览(126)

我正在使用AWK预处理文件,以便在Windows 10上的Gnuplot 5.2中进行绘图和拟合。例如:

plot '<awk "{print}" file1.dat file2.dat'

字符串
虽然fit工作正常,但plot会产生以下消息:

Bad data on line 1 of file <awk "{print}" file1.dat file2.dat


我用print system('awk "{print}" file1.dat file2.dat')看了一下坏数据,这表明数据前面有两行额外的数据,我甚至可以用最小的print system('awk ""')来复制,这使得

fstat < 0: fd = 0
fstat < 0: fd = 2


当然,如果我只是想从AWK命令中提取一个数字,我可以这样做

sum = real(substr(system('awk "{sum+=$2} END {print sum}" file1.dat'), 37,-1))


虽然这是恼人的,它的工作。但我还没有找到任何工作周围的plot。更我想一个解决方案,避免额外的行从一开始。有没有人有一个想法如何做到这一点?
这里,我还有两个测试用例可以提供信息:
1.如果我在CMD中运行AWK,则不会有额外的行。
1.其他CMD命令也不会在gnuplot中生成线,例如,如果我调用print system('echo test')

t8e9dugd

t8e9dugd1#

当我试图从awk脚本中提取值时,我也遇到了同样的问题。

gnuplot> a = system('gawk "BEGIN { nnt=0;}; {nnt = $2>nnt?$2:nnt; } END{ print nnt }" load.dat ')
gnuplot> print a
fstat < 0: fd = 0
fstat < 0: fd = 2
3
gnuplot>

字符串
通过以下两个步骤来去除这两个烦人的多余行,步骤1:使用管道操作符传递数据文件

gnuplot> a = system('gawk "BEGIN { nnt=0;}; {nnt = $2>nnt?$2:nnt; } END{ print nnt }" load.dat ')
gnuplot> print a
fstat < 0: fd = 0
fstat < 0: fd = 2
3
gnuplot>


步骤2:将stdout /stderr组合在一起

gnuplot> a = system('gawk "BEGIN { nnt=0;}; {nnt = $2>nnt?$2:nnt; } END{ print nnt }" load.dat ')
gnuplot> print a
fstat < 0: fd = 0
fstat < 0: fd = 2
3
gnuplot>


那么问题就可以解决了。

相关问题