2

gnuplotでデータをプロットするために、bashでスクリプトを実行しています。しかし、うまくいきません。

コマンドラインにデータをスローするプログラムがあります。そのデータをファイルに収集し、このプロセスをループして目的の結果を取得します。このスクリプトがあるとします

 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

でのリダイレクト>はシェルによって行われます。したがって、実行時に最初に起こることcat data_$N.dat | xargs ./program.exe > data_$N.datは、シェルがdata_$N.dat書き込み用に開き、それを切り捨てることです。現在は空なので、cat起動時にファイルが見つかりますが、既に切り捨てられています。

出力を一時的な場所にリダイレクトするだけです ($$スクリプトがある程度独立しているため、PID を返す場所で使用するのが一般的です)。それで... > tmp_$$.dat、その直後にできますmv -f tmp_$$.dat data_$N.dat

于 2011-12-23T19:40:35.770 に答える