今日も計算機室にこもってレポート。
講義無い時間はこもってレポート書き。なんだけど、あんまし進まんかった。なんでなのかなんてのはわかってる。Cで書いた数値計算のプログラムを動かしたり、結果をいじったりするために、初めて使ってみた awk が思った以上におもしろくて、レポートにまで手があましまわらんかた。まあ、awk でやってたのはレポートに使うデータの整理だったりするんで、0じゃねえんだけど。時間と労力の先行投資と言って言えないこともないかねえ。まあ実際便利で、今後多用すると思う。
今回の実用例。なんだこれは。えーと、振り子運動のほげほげを求めるプログラムの誤差の値とかです。
% cat hoge # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e100 = 5.082833e+03 # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e200 = 3.424186e+01 # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e400 = 1.831664e+00 # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e800 = 3.552234e-01 # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e1600 = 1.140982e-01 # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e3200 = 4.637212e-02 # Euler alpha = 0.000000,theta0 = 0.100000, omega0 = 0.000000, e6400 = 2.098815e-02
まあそんなんはどうでもいいんですけど。この結果を色々いじって LaTeX に埋め込んだり、gnuplot に投げてグラフを描いたり、したいわけですよ。そんなとき、awk みたいなひとが便利。
% cat hoge |awk '{if($11){printf("%.4e\n",before/$11);before=$11}}' 0.0000e+00 1.4844e+02 1.8694e+01 5.1564e+00 3.1133e+00 2.4605e+00 2.2094e+00 %
Builtin な色々のおかげでワンライナーが楽です。
もちろん Perl なんかでも同じことはできるんだけど、
% cat hoge |perl -ne'@a=/[^\s]+/g;printf"%.4e\n",$a[10] if$a[10]' 5.0828e+03 3.4242e+01 1.8317e+00 3.5522e-01 1.1410e-01 4.6372e-02 2.0988e-02 %
うーんまあこの場合どっちが使い捨てワンライナー書くの楽な気分かっつーと、俺は使うの初めてだったけど、それでも awk のが楽に感じた。