〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
1180 re(1):データを変数として取り出す方法について |
2006/1/24(火)09:44 - 竹の - nolm01.iee.niit.ac.jp - 7683 hit(s)
いくつか考えてみました。
1) 私なら、shell script の here document と組み合わせてやると思います。
例えば以下のような感じです (bash script でなくて csh script ですが)。
----- ここから -----
#!/bin/csh -f
set fname = data
set shiftv = `head -1 $fname | awk '{print $2}'`
gnuplot -persist <<EOF
plot '$fname' using 1:(\$2-$shiftv) w l
EOF
----- ここまで -----
これなら、gnuplot では面倒なループ処理等が shell script の機能や
shell 変数で可能になります。
2) gnuplot 4.1 の revision によるのですが、2005 07/10 以降の
gnuplot-4.1 なら gnuplot 内部で system() の返り値や `` を利用する、
という手が使えます。help system function が見れないようならこれは
利用できません。
cf. http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/gpinfo-2005.html#info-20050722
これを使って head -1 data | awk '{print $2}' の出力をもらう、とい
ったことをすればいいのですが、しかしその場合ファイル名を得ないとい
けないので、複数のデータファイルに共通の gnuplot スクリプトを作ろ
うとするときには少し困ります。
そのデータファイル名を gnuplot に渡そうとすると、あるいは複数のフ
ァイルに共通の処理をしようとすると結局 shell script などを利用する
ことになると思いますから、1) に戻る、といった感じになりますかね。
私は今ならそんな風にします。
3) 昔なら、そのスクリプトにかけるデータファイルの一覧と awk を使っ
てそのデータファイル分の gnuplot スクリプト全体 (例えば以下のよう
なもの) を作ってからそれを gnuplot にかけてたかも。
----- ここから -----
set term post eps
shiftv = `head -1 data1 | awk '{print $2}'`
set out 'file1.eps'
plot 'data1' using 1:($2-shiftv) w l
set out
shiftv = `head -1 data2 | awk '{print $2}'`
set out 'file2.eps'
plot 'data2' using 1:($2-shiftv) w l
set out
....
----- ここまで -----
`` が使えない gnuplot なら、上を生成するときに awk 内部で直接
データから shift 値を読み込んで
shiftv = 20
とかしてやることも可能です。
4) または template の gnuplot スクリプトを用意しておいて (以下
のようなもの)、
----- ここから -----
set term post eps
shiftv = `head -1 @DATA@ | awk '{print $2}'`
set out "@OUTF@"
plot '@DATA@' using 1:($2-shiftv) w l
set out
----- ここまで -----
それを各データファイル毎に sed などで
sed -e "s/@DATA@/data1/g" -e "s/@OUTF@/file1.eps/g" template > tmp.gp
のように変換してから使うとか (もちろん shell script 内で)。
他の方からも他の解が得られると思います。
〔ツリー構成〕
┣【1180】 re(1):データを変数として取り出す方法について 2006/1/24(火)09:44 竹の (2287) |
〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.