简短的回答:
这将为每个数据系列与第 1 列创建单独的绘图文件:
for i in {2..7}; do `gracebat -nosafe -hdevice PNG -printfile $i.png -block a.txt -bxy 1:$1`; done
长答案:
如果您想在相同的轴上绘制所有列(从第 2 列到包括第 7 列)与第 1 列,您可以这样做:
for i in {2..7}; do echo -n " -block file.dat -bxy 1:$i"; done | xargs xmgrace
但由于您的问题是要求单独的地块,我们可以这样做:
for i in {2..7}; do echo -n " -block file.dat -bxy 1:$i" | xargs xmgrace; done
或者这个,它给出相同的结果但更简单:
for i in {2..7}; do echo -n `xmgrace -block file.dat -bxy 1:$i`; done
然而,这不是很实用,因为各个地块一个一个地出现,并且每个地块都必须关闭才能出现下一个。
最好让 xmgrace 以批处理模式运行并为您保存每个绘图的图像。您可以使用 xmgrace 批处理文件并使用gracebat
可执行文件来执行此操作。
for i in {2..7}; do `gracebat -nosafe -batch save.bfile -block a.txt -bxy 1:$1`; done
这在批处理模式下使用与以前相同的数据调用 Grace,但运行保存在 中的批处理命令save.bfile
,其中包含:
PRINT TO "out.ps"
PRINT
明显的问题是每次新的迭代都会覆盖out.ps
postscript 文件,因为输出文件的名称在我们的批处理文件中是硬编码的!所以你只能看到文件中的最后一个。幸运的是,我们可以在每次调用 Gracebat 之前使用 sed 修改批处理文件!
for i in {2..7}; do `sed -e "s/outName/${i}/g" save.bfile > new.bfile`; `gracebat -nosafe -batch new.bfile -block a.txt -bxy 1:$1`; done
save.bfile 现在包含
PRINT TO "outName.ps"
PRINT
并且字符串outName
被 $i 替换。
您现在应该有大量 .ps 文件,其中包含您的绘图。玩弄批处理文件以便用它做更多的事情。有关您可以包含的更多命令,请参阅此页面,包括如何更改输出文件格式。
或者,您可以完全跳过使用批处理文件:
for i in {2..7}; do `gracebat -nosafe -hdevice PNG -printfile $i.png -block a.txt -bxy 1:$1`; done
如果你有一个参数文件,你也可以添加 -param 命令来设置样式。