gnuplot: スクリプトに引数を渡したい
gnuplotでは、スクリプトを読み出す機能があります。
gnuplot -c <filename>
この機能を利用することによって、定型的な処理を簡単に実施することができます。例えばパラメータを変えて実験をした際のデータを処理するなど。
この時に、スクリプトに対して何かしらの引数 (パラメータ) を渡すことができればより便利です。そして、 gnuplot にはもともとその機能が備わっているのです。
-c
オプションの引数を利用
-c
の後にスクリプトファイルを指定しその後にスペース区切りで数値や文字列などを並べることでスクリプトの引数とすることができます。
gnuplot -c <filename> ARG0 ARG1 ...
具体的にどういうことか見ていきます。例えば以下のようなスクリプトファイルを用意します。 ファイル名を script.plg
とします。
print "This script is ", ARG0
print "1st arg :", ARG1
print "2nd arg :", ARG2
そして、引数を渡して実行すると以下のようになります。
> gnuplot -c ./script.plg test1 test2
This script is ./script.plg
1st arg : test1
2nd arg : test2
ARG0
は実行対象のスクリプト名、ARG1
以降の ARG*
はコマンドラインで与えられた引数に対して順次割り振られていくわけですね。
こちらの機能を利用することで、plot対象のファイル名を変えて同じ形式のグラフを出したいときなどに引数を与えるだけで簡単に実施ができるようになります。
ちなみにこの命名方式は bash スクリプトの引数の命名方式に似ています。
-e
オプションで先回りして変数を定義
-c
オプションでスクリプトを実行する前に -e
を利用して変数を定義してしまう方法です。
-e
オプションでは指定したgnuplotのコマンドを実行することができます。ダブルクオーテーションが必要です。
例えば以下のようにすればサイン波をすぐにPlotすることができます。
gnuplot -e "plot sin(x);"
これを利用して、 -e
の中で変数の定義を先回りして行い、その定義した変数をスクリプトの中で利用するようにします。若干トリッキーです。
例えば以下のスクリプトを script.plg
として作成します。変数名は何でもよいですが、ここでは hoge
と fuga
とします。
print "hoge is :", hoge
print "fuga is :", fuga
そして実際に使う際には以下のようになります。
> gnuplot -e "hoge = 32; fuga = 1008" -c ./script.plg
hoge is : 32
fuga is : 1008
この例だとあまり意味がないですが、実際にはおそらくファイル名などを指定して任意のファイルをPlotできるようにするなどといった使い方をするでしょう。
環境変数から渡す方法
最後に、最もトリッキーな手法です。環境変数の内容をスクリプト内部で取得して利用する方法です。
具体的には、 system
というコマンドで シェルスクリプトのコマンドを呼び出すことができるため、その結果を変数に代入します。
例えば以下のようなスクリプトを作成します。
hoge=system("echo $hoge")
fuga=system("echo $fuga")
print "hoge is :", hoge
print "fuga is :", fuga
こちらを実行する際に、 上記の hoge
とか fuga
が環境変数として定義されていればそのままスクリプトの変数に代入されます。
環境変数の定義には export
などを利用する方式がありますが、それだと環境が汚れる可能性もあるため、スクリプト実行時に同時に指定する方式を選びます。
hoge=32 fuga=1008 gnuplot -c ./script.plg
hoge is : 32
fuga is : 1008
まぁ、あんまり使わないと思います。
コメント
コメントを投稿