今日も計算機室にこもってレポート。

講義無い時間はこもってレポート書き。なんだけど、あんまし進まんかった。なんでなのかなんてのはわかってる。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 のが楽に感じた。

test