2

我在 bash 上做一些脚本来用 gnuplot 绘制数据。但它不起作用。

我有一个将数据抛出到命令行的程序。我在一个文件中收集这些数据,然后循环这个过程以获得所需的结果。说我有这个脚本

 N = 10
 ./program.exe > data_$N.dat # Creating the data to be plotted
 for ((i = 0 ; i<1 ; i++)) do # Dummy loop to throw all together to gnuplot
  echo "set size square"
  echo "set xrange[-$N-1:$N+1]; set yrange[-$N-1:$N+1];"
  echo "plot '-' using 1:2"
  for((j = 0 ; j <= 9 ; j++)) do
   # Throwing the data to gnuplot
   echo "cat data_$N.dat" 
   # Updating the file and overwriting on it
   echo "cat data_$N.dat | xargs ./program.exe > data_$N.dat" | bash  
   echo "e" 
   echo "pause 0.5"
  done
 done | gnuplot -persist # Throwing the formatted data to gnuplot

所以,基本上我将格式化文本从文件中扔给 gnuplot,改变它的内容,但不改变文件的名称。

当然,我不想更改文件的名称,因为我使用该文件进行与该步骤相对应的计算,然后用更新的数据覆盖该文件。一种缓冲。计算流程为

./program.exe > data.dat # Making the initial data
begin gnuplot loop 
 throw data to gnuplot
 "cat data.dat | xargs ./program.exe > data.dat" # update data overwriting file
end gnuplot loop
pipe all the script to gnuplot

希望很明确,您可以帮助我:)。谢谢!

PD。我是物理学家。

4

1 回答 1

5

重定向>由 shell 完成。因此,执行时发生的第一件事就是cat data_$N.dat | xargs ./program.exe > data_$N.dat打开 shelldata_$N.dat进行写入并截断它。现在它是空的,所以当cat它启动时它会找到一个文件,但它已经被截断了。

只需将您的输出重定向到一个临时位置(通常用于$$返回您的 PID,因此您的脚本有些独立)。所以... > tmp_$$.dat然后你就可以mv -f tmp_$$.dat data_$N.dat

于 2011-12-23T19:40:35.770 回答