複数ファイルを次々に読み込みGMTで作図したい
みなさんこんにちは。おこめまんです。
今回はGMTでの作図を行う際のTipsを扱います。
はじめに
この記事を読んでいる皆さんは気象データをGMTを用いて図化することが多いかと思います。
このとき「日時のみが異なるifile(描画する元データの入っているファイル)を繰り返して(ループをかけて)シェルスクリプトで指定してGMTで図化したいなあ」と思っていませんか。
描きたい図が少ない場合は気にならないかもしれませんが、大量の図を描く場合は大変です。シェルスクリプトでifileをいちいち指定し直して描画するのでは時間がかかってしまいますよね。ぜひとも自動化したいものです。
今回は、「日時のリストを作成してGMTでつぎつぎに描画する方法」を伝授しましょう。
今回ループで開きたいifile
2018-01-05_00-00-00.txt
2018-05-20_01-00-00.txt
2018-03-31_23-00-00.txt
例として、ファイルの名前が年、月、日、時、分、秒から構成されるifileを扱います。
ただし、各ファイルのデータの構成は同様のものとします。
シェルスクリプト
※適当なシェルスクリプト「example.sh」の中身を以下の通りとします。
----------------------------------------------------------------------------------------------------------
#!/bin/bash
cat << EOF > date.txt
2018 01 05 00 00 00
2018 05 20 01 00 00
2018 03 31 23 00 00
EOF
while read YEAR MONTH DAY HOUR MINUTE SECOND
do
### 作図する日時を表示 ###
echo "draw date ---> " $YEAR $MONTH $DAY $HOUR $MINUTE $SECOND
### 図化スクリプト ###
ifile=$YEAR'-'$MONTH'-'$DAY'_'$HOUR'-'$MINUTE'-'$SECOND'.txt'
psbasemap ~~~~~~~~~
(省略)
ps2raster ~~~~(convert~~~~~)
done < date.txt
----------------------------------------------------------------------------------------------------------
シェルスクリプトの説明
cat << EOF > date.txt
2018 01 05 00 00 00
2018 05 20 01 00 00
2018 03 31 23 00 00
EOF
日時を各項ごとに分けてdate.txtに書き込みます。いちいちExcelでこのリストを作成することは面倒ですので、シェルスクリプトで作成しています。
cat << EOF > date.txt
(ここに1行ずつ日時を記述します。このとき、各項をスペースで区切りましょう。)
EOF
注意!!
2018 03 31 23 00 00
(ここ!空行ダメ!)
EOF
日時とEOFの間に空行を作らないようにしましょう。
-------------------------------------------------------------------------------------------------
while read YEAR MONTH DAY HOUR MINUTE SECOND
do
~~~~~
~~~~~
done < date.txt
この部分で先ほど書き込んだdate.txtを1行ずつ読み込み、処理を行います。
具体的には、date.txtをYEAR MONTH DAY HOUR MINUTE SECONDとして1行ずつ読み込み、doからdoneまでの作図プログラムを実行します。
ifile=$YEAR'-'$MONTH'-'$DAY'_'$HOUR'-'$MINUTE'-'$SECOND'.txt'
で開くファイルを指定します。date.txtを1行ずつ読み込むため、日時の異なるファイルがループで開かれます。
最後に
いかがでしたか。この手法を使えば、大量のファイルでも次々に図化することができるはずです。ぜひお試しください!