連載
» 2019年07月11日 05時00分 公開

Linux基本コマンドTips(320):【 numfmt 】コマンド――数値を読みやすい単位で整形して表示する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、数値を読みやすい単位で整形したり、換算して表示したりする「numfmt」コマンドです。

[西村めぐみ,@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、数値を読みやすい単位で整形したり、換算して表示したりする「numfmt」コマンドです。

numfmtコマンドとは?

 「numfmt」は数値を読みやすい単位で整形して表示するコマンドです。「k(キロ)」や「M(メガ)」などの換算も可能です。

 負の数や小数点を含む数も整形できますが、単位換算では正の数だけを受け付けます。



numfmtコマンドの書式

numfmt [オプション] [値……]

※[ ]は省略可能な引数を示しています。





numfmtの主なオプション

短いオプション 長いオプション 意味
--from=単位 kやMなどの単位を入力した場合の処理を決める(本文を参照
--to=単位 kやMなどの単位を出力するかどうかを指定する(本文を参照
--from-unit=倍数 入力値を何倍にして出力するかを指定する(デフォルトは1、100を指定した場合、50が5000になる)
--to-unit=倍数 入力値を何分の1にして出力するかを指定する(デフォルトは1、100を指定した場合、5000が50になる、本文を参照
--grouping ロケールに従った桁指定(3桁を「,」で区切るなど)で表示する
--padding=桁数 表示桁数を指定する。正の数を指定した場合は空白で埋めて右寄せ、負の数の場合は左寄せで表示する
--format=書式 printfの「%f」(連載第319回)を使用した浮動小数点数の書式を指定する(※1)
--round=方式 単位で割った結果、余りが出た場合の処理を「up(切り上げ)」「down(切り下げ)」「from-zero」(絶対値が大きくなる方向に切り上げ、デフォルト)、「towards-zero(絶対値が小さくなる方向に切り下げ)」「nearest(四捨五入)」から指定する
--suffix=接尾辞 数値の接尾辞を指定する(本文を参照
-d 区切り文字 --delimiter=区切り文字 区切り文字を指定する(デフォルトは空白文字、本文を参照
--field=番号 何番目の値を整形するかを指定する(デフォルトは1番目のフィールド)
--header=行数 ヘッダの行数(変換対象外とする行数)を1以上で指定する。行数を指定しなかった場合は先頭行(1行目)を変換せず、2行目以降を変換して出力する
--invalid=モード 数値以外が渡された場合の処理モードを「abort」(エラーとして中断する、デフォルト)、「fail」と「warn」(エラーメッセージを表示するが中断はしない)、「ignore」(無視して実行)で指定する

※1 使用できるのは整数部の桁数指定と「'」(3桁区切り)、「-」(左ぞろえ)のみで、小数点以下の桁数は指定できない。





数値を桁ぞろえやカンマ区切りで表示する

 「numfmt --format="書式" 数値」で、数値を書式に従って整形して表示します。使用できる書式は「%桁数f」と「%'f」です(画面1)。例えば「--format="%5f"」とすると数値を5桁の幅で表示し(※2)、「--format="%'f"」では数値を3桁区切りで表示します。

 また、「numfmt --grouping 数値」のようにすると、ロケール設定に従った表示となります(※3)。

※2 この指定の場合、5桁よりも小さい数字を入力すると5桁になるよう左側に空白が入り、6桁以上だと整形しない。
※3 ロケールとはシステムにおける地域と言語の設定をいう。現在の設定を確認するには「locale」コマンド(連載第263回)を使う。



 コマンドラインで数値を指定しなかった場合、標準入力から受け取った数値を表示します。この場合は、[CTRL]+[C]キーで処理を終了します。

コマンド実行例

numfmt --format="書式" 数値

(数値を%fで指定した書式で表示)

numfmt --format="%5f" 123

(123を5桁の幅で表示)(画面1

numfmt --format="%'f" 10000

(10000を3桁区切りで表示)(画面1

numfmt --format="%'8f" 10000

(10000を3桁区切りで8桁の幅で表示)(画面1

numfmt --grouping 10000

(10000をシステムのロケールに従ったスタイルで表示)(画面1


画面1 画面1 書式を変えて数値を出力したところ

 なお、ロケールによる違いを確認したい場合、例えば、「LC_NUMERIC=ロケール numfmt --grouping 数値」のように、一時的にロケールを変えることで実行できます(画面2)。

コマンド実行例

LC_NUMERIC=ja_JP numfmt --grouping 10000

(10000を日本語(日本)のスタイルで表示)(画面2

LC_NUMERIC=fr_FR numfmt --grouping 10000

(10000をフランス語(フランス)のスタイルで10000を表示)(画面2

LC_NUMERIC=fr_CH numfmt --grouping 10000

(10000をフランス語(スイス)のスタイルで10000を表示)(画面2


画面2 画面2 ロケールによる数値出力の違いを確認したところ


「k」や「M」などの単位を使って換算表示する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。