週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
昨日、初めてawkスクリプトを触りました。
awk '$3==200.0 && $4==3.0 && $2==1.0{print$1,$5}' peaks.dat
こんなコードです。テーブルが5列あって、四変数の関数となっていたので、 そのうち三変数を固定したテーブルを作りました。 今までこのような操作はperlでやっていました。今回はなぜか、気がついたらawkを調べていました。魔がさしたんでしょうか。 awkスクリプトは全く知りませんでしたが、 検索してトップに出てきたサイトを参考にしたら、この程度のことはすぐに書けました。 簡単に書けて感動です。 awkはこういう操作を簡単にするためにあるんだ、という感じの簡単さです。 作者の意図が伝わってくるというかなんというか。

上のコードの周りはこうなっていました。

plot "< awk '(中略)' peaks.dat | sort -n" notitle w lp
gnuplotのplotコマンドのファイル名が、awkのone-linerになっています。 gnuplot tips/UNIXのコマンドを利用するを参考にしました。 そう、このページを参考にしていたからawkを見たのでした。

はじめはawkに頼らず、

using 1:($3==200.0&&$4==3.0&&$2==1.0?$5:1/0)
のように、プロットしたくない点を1/0と指定して消去する方法を使おうとしていました。 しかしこれではだめです。プロットしたい点の間に消された点が大量にあるため、 プロットしたい点は孤立しているとみなされ、点同士を線でつないでくれません。 awkを使えば、必要な点だけがgnuplotにわたるので、このような問題はなくなります。 ちなみにawkの後のsortコマンドは、グラフをx軸の小さいほうから順番に書くために必要です。 これがないと、点が変な順番でつながれてしまいます。

さらに、上のgnuplotコードは次のコードから生成されたものでした。

plotFile="< awk '"++condition graphIndex1 cond1
     ++" && "++condition graphIndex2 cond2
     ++" && "++condition drawIndex z
     ++"{print"
     ++"$"++show (xaxisIndex+1)
     ++","++yaxis
     ++"}' peaks.dat | sort -n",
これはHaskellのコードです。 x軸に指定する変数を順番に変更し、 そのほかの変数を固定する値も変えつつ、さまざまなパターンのグラフを生成しています。 実物がないとうまく説明できませんが、グラフを縦横に並べることで五次元のグラフを生成しているという荒業をやっていた、と書けば、むちゃくちゃさがわかるでしょうか。 これはHaskellのListモナドとWriterモナドを駆使して出来たものです。 Haskellがあればこの程度のグラフの大量生産も苦もなく出来ます。 あ、本当は半日くらいかかりました。大変な苦労でした。 それでもこの作業のおかげで、今後着目すべき値の範囲がわかり、 闇雲に計算をしなくてすむようになりました。

というわけで、私の初めてのawkスクリプトは、モナドまみれになったのでした。 おしまい。

スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/157-c83200ac
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。