一日1つのデータファイルがあり、その名前が YYYYMMDD.dat である (例えば 2002年1月3日のデータは 20020103.dat に格納されている) と言った場合に ある処理をするプログラム process を1月のデータ全てにかけたい場合、以下のような 解決策がある。
まず、C なり Fortran なりの処理プログラム process に対して必要な情報は 起動時の引数の形で与え、処理結果をあるファイル result に書き足していく ことにしておけば、tcsh を使って
rm result foreach t (データのあるディレクトリ名/200201??.dat) 処理ソフトのあるディレクトリ名/process $t >> result end
tcsh ファイル名
foreach t (データのあるディレクトリ名/200201??.dat) 処理ソフトのあるディレクトリ名/process $t > $t:r.res1 end
もうちょっと複雑な例としては、年/月 というディレクトリに yyyymmdd.dat が 保存されているというような場合には、process の返り値として、実行に成功すれば 0 (成功) を失敗すれば それ以外 (不成功) を返すことにし (要するにデータファイルが無ければ失敗するようにしておき )、
set PROGDIR=処理ソフトのあるディレクトリ名 set DATADIR=データのあるディレクトリ名 foreach s (2000 2001 2002) foreach t (01 02 03 04 05 06 07 08 09 10 11 12) foreach u (0 1 2 3) foreach v (0 1 2 3 4 5 6 7 8 9) $PROGDIR/process $DATADIR/$s/$t/$s$t$u$v.dat > tmpresult && mv tmpresult $s$t$u$v.res1 end end end end
もちろん、C なり Fortran なりで、必要なファイル名を作成して読み込み処理するという方法も有効な方法であり、複雑な処理の場合はその方が良いことも多い。