2013年6月21日金曜日

bashな一日

今日はsensitivity analysisのためにBashでスクリプティングを久しぶりにやった。去年の夏に計算科学の授業をとったとき以来の複雑さ。

もちろん忘れてしまったコマンドなんかもたくさんあるので去年作ったファイルを使って記憶を呼び戻すことに…そのファイルの中からいくつかエラーが出てきた。。。去年の自分、解決させないまま放置していたということか…。

sed

sedのオプションに関して少し。複数のオプション(for example, "i" & "e")を使うときに僕の古いファイルは:

sed -ie ... filename としていたんですが、これだと編集されたファイルと同じファイルで名前の語尾にオプション名として入力したはずのeが含まれたファイルが作成されているkとに気づきました。これを防ぐために各オプションは離して定義するほうがいいみたいです。例えば:
sed -i -e ... filename
っというふうに。

なぜか、正規表現を使っていたにも関わらず-eのオプションで大丈夫だったのが不思議だ。今日作ったスクリプトはこちら:

parnam=xkmort
ininum=2.
para=0
echo $para >> SA_stat.txt
grep "${parnam} " namelist_pisces >> SA_stat.txt
for newnum in $(seq 1.0 0.2 3.0)
do
 sed -i -r "s/${parnam}\s+=\s+[0-9]+\.*[0-9]*/${parnam}  =  ${newnum}/" namelist_pisces
 ./opa
 para=$((${para}+1))
 echo $para >> SA_stat.txt
 grep "${parnam} " namelist_pisces >> SA_stat.txt
 mv LABSEA_1m*_ptrc_T.nc ../MY_SRC/SA/${parnam}${para}.nc
 rm LABSEA_*restart*.nc
done
echo "end of run for $parnam" >> SA_stat.txt
sed -i -r "s/${parnam} += +[0-9]+\.*[0-9]*/${parnam}  =  ${ininum}/" namelist_pisces



そんなこんなで昔作ったシェルスクリプトを参考にしてsensitivity.shというファイルを作成。これはquequeで動くように作ったんだがそんなに計算時間がかからないのと扱うデータも少ないのでヘッドノードで走らせてもいいかなと思いtest_SA.shというのを作成(上記スクリプト)してこっちを使ってSensitivity Analysisを開始。ひとつのパラメータにつき5分もあれば終わるので300分も費やせば終わるので月曜までには間に合いそう。あとはミスを犯すことなくスムーズに進むことを祈るのみ。

namelist_piscesを見て気づいたことが…。パラメータを数えてみると80あった。多すぎやろ。。ループザループに変更するべきだな。

…頑張ろう、バッシュスクリプティング。正直自分がコンピューターサイエンスの学生ではないかと思うことがある今日この頃です。

参考文献: http://linuxjm.sourceforge.jp/html/GNU_sed/man1/sed.1.html

0 件のコメント:

コメントを投稿