コマンド出力/ファイル中の数値を Human readable にするフィルタスクリプト

TECHSCORE Advent Calendar 2016 の 10 日目の記事です。

人情のあるコマンド

例えば、メモリ量を表示する free コマンドには人情があります。
なんと -h とオプションを付加すると、↓のように接頭辞つきの表示をしてくれるのです。

わかりやすい! 人情!

ファイルに人情はない

しかし、コマンドではなく /proc/$PID/io のようなファイルでは勿論オプションなどありません。
例えば、↓はchromium の IO 統計情報ですが、思わず眉をしかめてしまい人相が悪くなること請け合いです。
何桁あるかわからない!

ここで専用スクリプトを作るのもアリかと思いますが、毎度そういうことをするのも面倒です。
そこで、「何か数字を見掛けたら人情する」スクリプトを Ruby で書いてみました。

あらかじめ調理しておいたスクリプトがこちらです

人情 などのファイル名にしましょう。

使いかた

コマンドに引数として渡すか、他のコマンドからパイプで流しこむだけです。

特定箇所の数値だけを人情したい場合は、-p-s で Prefix / Suffix となる正規表現を指定します。
例えば、= の直後の数値のみ対象であれば、↓のようにします。
人情してほしくない整数の ID などが含まれる場合などに使う想定です。

ARGF 便利

この Ruby スクリプトで使われている ARGF ですが、ちょっと便利なオブジェクトとなっています。

ARGF はファイルオブジェクトのように扱えるのですが、その中身は

ARGV が空であれば標準入力、でなければ内容をファイル名として、それらの中身を連結したもの

と、なっています。

つまり、標準入力と引数指定の両対応スクリプトを簡単に書けるわけです。

ただし、ARGV に余計な要素が残っていると期待しない挙動になります。
ですので↓のように、オプションなどで使用した分は除去しておく必要があります。

ちなみに、ARGF.filename というメソッドがあり、その時読んでいる箇所のファイル名がわかります。
どういう時に便利なんでしょうね。

人情のない生き物

ちなみにこちらが人情のない生き物となります。

世界で一番かわいい人情のない生き物の写真です

Comments are closed, but you can leave a trackback: Trackback URL.