ターミナルコマンドの「date」でミリ秒を表示するまでの道のり

2015年6月17日

Shell プログラミング

Linuxコマンドでdateと入力すれば 「 2015年 6月 8日 月曜日 23:28:40 JST」 のように、日付が返ってくる。

shellでどこまでツールを作れるかtry

今までは主にPHPでツールを作ってきたので、大体の事は問題なくできてきた。 ライブラリなども豊富にあるプログラム言語では、問題などあまり感じたことが無かった。 今回はshellだけを用いて計測ツールを作る上で、どうしてもミリ秒が取得したくなった。 shellと言っても、awkやsedなどの言語も組み合わせで使うことは可能だ。 何故なら大体のターミナルコマンドには常備されているからだ。 今回行いたいことは、「wgetでwebサイトからデータ取得をした際に、どのくらいの時間がかかったかミリ秒単位で計測したい」というものだ。

あっけなく解決・・・?!

すこしググるとLinuxコマンドでのミリ秒取得は、Nオプションを使うことで「ナノ秒」の取得ができる事が判明した。 $ date +%N > 249158971 $ date +%6N > 092199 $ date +%3N > 623 説明するまでもないが、”+%N”で9桁表示のミリ秒が表示され、 ”+%6N”で6桁、”+%3N”で3桁という具合だ。 なんて簡単なんだ・・・

想定外の自体が発生

このまま問題なく進む予定だったが、自宅の愛器MacBookAirのターミナルコマンドでは、Nオプションが動作しないことが判明 $ date +%N > N なんじゃこりゃ、「N」って表示される・・・文字列扱い・・・どうやらdateコマンドはバージョンによって、Nオプションがないそうだ。 会社のmacでも試したが、OSは最新なのに、dateコマンドは古いバージョン・・・orz Debian系もCentOS系も問題なくナノオプションが使えるのに、BSD系のmacは使えないという事のようだ。

Macに対応

macは「gdate」というモジュールを使う事でlinuxの「date」コマンドと同じ事ができるようだ。 brew で「coreutil」モジュールをインストールすると、一緒に入るようなので、入れてみる ※brewのインストールは下のURLを参照ください。 http://brew.sh/index_ja.html $ brew install coreutils $ gdate +%N > 436352000 $ gdate +%6N > 065620 $ gdate +%3N > 769 できました。 さて、shellでmacとlinuxの分岐でも書くとするか。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。