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

问题描述 投票:0回答:1

我正在使用 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,则不会出现多余的行。
  2. 其他 CMD 命令也不会在 gnuplot 中生成行,即如果我调用
    print system('echo test')
windows awk cmd gnuplot
1个回答
0
投票

当我尝试从 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> 

那么问题就可以解决了。

© www.soinside.com 2019 - 2024. All rights reserved.