2017年9月25日月曜日

Fortranでシステムコマンドを使う

こんにちは。
久しぶりの投稿になります(←これいつも言ってる気が……)。


最近、Fortran内でシステムコマンドを使う方法を知ったので、
忘れないうちにまとめておこうかと。


方法はサブルーチンを使うというもの。

たいていのコンパイラで「system」というサブルーチンが用意されているらしい。
使い方はいたってカンタン。

 call system( "mkdir test" )

こんな感じでふつうにcallすれば使える。


ちなみに、同じく「system」という名前の関数がある。
これもふつうの関数と同じ使い方で使えるのだが、
integerとして宣言する必要があるらしい。

 integer :: system , status

 status = system( "pwd" )


上記から分かるように、関数の場合はコマンドの終了終了ステータスが結果の変数に
入るらしい。
←僕も勘違いしていた(^_^;)


そこまで無理してFortranでシステムコマンドを使う必要があるかという話はさておき……

2017年5月17日水曜日

dateコマンドについて

久しぶりの投稿になります。


今日はシェルスクリプトのdateコマンドについて。

シェルスクリプト中で日付を計算する際に割りとよく用いるのですが、
ついつい出力のフォーマットを忘れがちです。
多くのウェブサイトではフォーマットが全部出てくるので、この記事では
 よく使うものに絞って書こうかと。


まず、基本のオプションです。

 +[format] …フォーマットを指定する(書き方は下記①)
-d [string] …[string]で指定した日付・時刻を表示する(書き方は下記②)


①フォーマットの指定
よく使うフォーマットは以下の通り。

%Y …年(4桁)
%m …月(2桁)
%d …日(月内通算日数、2桁)
%H …時(00〜23、2桁)
%M …分(00〜59、2桁)

例えば、「2017-05-17 15:30」みたいに表示したい時は
 +"%Y-%m-%d %H:%M"
というふうに書けばOK。 


②日付・時刻の指定
[string]の部分に「何時間後」や「何日前」と書くと自動で計算してくれる。

前 → 〜 [単位] ago
後 → 〜 [単位]

例えば、「2017年5月17日12時の3日前」なら
 -d "2017/05/17 12:00 3 days ago"
と書けばOK。

ちなみに-dのところでは、日付は「/(スラッシュ)」、時刻は「:(コロン)」で区切る。
また、「3 days」の複数形のsはなくても勝手に計算してくれる模様。


③よくやる書き方
よくやるのは世界標準時(UTC)と日本時間(JST)の変換。
世界標準時を日本時間に変更するなら、

date_JST=`date +"%Y-%m-%d %H:%M" -d "${date_UTC} 9 hours"`



これだけ解れば、便利に使い回せると思います。