0

次のコードは完全に実行されます。

do for [i=1:$M_Orbs]{
set table 'L_z_'.i.'.dat'
plot [0:250] "L_z_expectation.dat" u 1:2+2*((i-1)*$M_Orbs+i) smooth cspline w l
unset table

set table 'Nocc_'.i.'.dat'
plot [0:250] "NO_PR.out"  u 1:2+$M_Orbs-i smooth cspline t 'M='.i w l
unset table
}

しかし、貼り付けコマンドを使用してこれらのファイルをループで結合しようとすると、問題が発生します。

plot for [i=1:$M_Orbs] '< paste 'L_z_'.i.'.dat' 'Nocc_'.i.'.dat'' u 1:(\$2*\$5) 

この行はエラーを表示します。

plot for [i=1:2] '< paste 'L_z_'.i.'.dat' 'Nocc_'.i.'.dat'' u 1:($2*$5) 
                           ^
       line 0: x range is invalid

gnuplot は for ループの値に i を代入する前に paste コマンドを実行しようとするため、エラーが発生したと確信しています。i をエスケープする別の方法、または少なくとも同じアイデアを別の方法で実装する方法はありますか?

4

1 に答える 1

0

引用符が間違っています。

一重引用符の内側では、エスケープせずに'二重引用符を使用するか、二重の一重引用符(一重引用符をエスケープする方法) を使用できます。"''

ただし、に指定されたファイル名をpaste引用してはならないため、プロット コマンドは次のようになります。

plot for [i=1:$M_Orbs] '< paste L_z_'.i.'.dat Nocc_'.i.'.dat' u 1:(column(2)*column(5))

column(2)の長いバージョンですが$2、エスケープしてはなりません。

sprintfファイル名をフォーマットするために使用することもできます。

plot for [i=1:$M_Orbs] '< paste '.sprintf('L_z_%d.dat Nocc_%d.dat', i, i) u 1:(\$2*\$5)

たとえば、数字にゼロを埋め込むことができるため、後者のバリアントを好みますsprintf('L_z_%03d.dat', )

于 2013-09-24T06:33:41.340 に答える