【 numfmt 】コマンド――数値を読みやすい単位で整形して表示する:Linux基本コマンドTips(320)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、数値を読みやすい単位で整形したり、換算して表示したりする「numfmt」コマンドです。
本連載は、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)
なお、ロケールによる違いを確認したい場合、例えば、「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)
「k」や「M」などの単位を使って換算表示する
「numfmt --to=単位 数値」で、数値を、指定した単位を使って換算表示します。逆に、「numfmt --from=単位 数値」で、単位付きの数値を単位のない数値に換算して表示します(画面3)。
単位の指定には、次の書式を指定できます(※4)。
※4 これ以外の単位を使用したい場合は「--suffix」を指定する。なお、--suffixでは指定した文字を単位の記号として使用するだけで、数値を換算しない。
書式 | 意味 |
---|---|
none | KやMなどの単位を使用しない(入力で使われている場合は数値でないものとして扱われる) |
auto | --fromでのみ利用可。K(1000)、Ki(1024)、M(1000000)、Mi(1048576)などを使用する |
si | K(1000)、M(1000000)などを使用する |
iec | K(1024)、M(1048576)などを使用する |
iec-i | Ki(1024)1Mi(1048576)などを使用する |
コマンド実行例
numfmt --to=単位 数値
(数値を、指定した単位を使って表示する)
numfmt --from=単位 数値
(単位付きの数値を換算して表示する)
numfmt --to=si 1000000
(1000000をSI単位(1000の倍数)で表示する)(画面3)
numfmt --to=iec 1000000
(1000000を2進単位(1024の倍数)で表示する)(画面3)
numfmt --from=si 100K
(100KをSI単位による指定と見なして換算する)(画面3)
numfmt --from=iec 100K
(100Kを2進単位による指定と見なして換算する)(画面3)
numfmt --from=auto 100K
(自動判定で換算する。KならばSI単位、Kiならば2進単位)(画面3)
numfmt --from=auto 100Ki
(自動判定で換算する。KならばSI単位、Kiならば2進単位)(画面3)
numfmt --from=si --to=iec 100M
(SI単位による100Mを2進単位に換算して表示する)(画面3)
numfmt --from=iec --to=si 100M
(2進単位による100MをSI単位に換算して表示する)(画面3)
千や万などの単位に換算して表示する
「--from-unit=倍数」で、入力値を何倍にして出力するか、指定します(画面4)。逆に、「--to-unit=倍数」で、入力値を何分の1にして出力するか、指定します。
--to-unit=倍数の指定で、計算結果に端数が出た場合、デフォルトでは切り上げ処理を行います(※5)。
※5 絶対値が大きくなる方向へ切り上げる(from-zero)。例えば画面4の3番目の例では4ダース余り2という結果から、5ダースと表示している。
出力時に単位を付けたい場合は「--suffix=」で指定します。例えば、入力した値を10000で割って、単位として「万」を付けて表示するなら「--to-unit=10000 --suffix=万」という指定になります。なお、入力時に「万」を入れても無視されます。
コマンド実行例
numfmt --from-unit=倍数 数値
(数値に指定した倍数を掛けて表示する)
numfmt --to-unit=倍数 数値
(数値を指定した倍数で割って表示する)
numfmt --from-unit=10000 --format="%'f" 30000
(30000に10000を掛けて、3桁区切りで表示する)(画面4)
numfmt --to-unit=10000 --suffix=万 30000
(30000を10000で割り、「万」を付けて表示する、表示結果は「3万」)(画面4)
numfmt --to-unit=12 --suffix=ダース 50
(50を12で割り「ダース」を付けて切り上げ表示する)(画面4)
numfmt --to-unit=12 --suffix=ダース --round=down 50
(50を12で割り「ダース」を付けて切り下げ表示する)(画面4)
コマンドの実行結果やテキストファイルを整形する
コマンドの実行結果を整形したい場合は「コマンド | numfmt オプション」のように指定します。同様に、テキストファイルを整形したい場合は「cat ファイル | numfmt オプション」のように指定します。
標準入力からデータを入力した場合、デフォルトでは、1番目のフィールド(空白文字区切り)を整形の対象とします。2番目以降のフィールドを対象としたい場合は「--field=番号」で何番目のフィールドを整形するか指定します(画面5)。
先頭行を処理の対象外にしたい場合は「-header」を指定します。「--header=行数」で、対象外とする行数を指定することも可能です。
また、区切り(デリミタ)を空白文字から別の文字に変更したい場合は「-d」オプションで指定します。
コマンド実行例
コマンド | numfmt オプション
(コマンドの実行結果をnumfmtで整形する)
ls -l | numfmt --field=5 --to=si --header=1
(「ls -l」の結果を、5番目のフィールドをSI単位系で表示、1行目をヘッダとして整形対象にしない)
cat data.csv | numfmt -d, --field=2 --to=si
(「cat data.csv」の出力を、区切り文字「,」を使い、2番目のフィールドをSI単位系で表示)
筆者紹介
西村 めぐみ(にしむら めぐみ)
元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。
Copyright © ITmedia, Inc. All Rights Reserved.