我正在使用 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
。我更想要一个从一开始就避免额外行的解决方案。有人知道如何做到这一点吗?
这里,我还有两个测试用例可以提供信息:
print system('echo test')
当我尝试从 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>
那么问题就可以解决了。