numfmtコマンドは数値をKやMをつけた数値に変換、またはその逆でKやM等のついた数値を単純な数値に変換することができます。
numfmtコマンドはオプションを指定し利用します。例えば、変換する数値の箇所はcutコマンドのようにフィールドを指定して、数値を変換するようにオプションで指定します。また、'auto'、'si'、'iec'、'iec-i'等のオプションで数値の変換方法を指定し利用します。
目次
- 1 numfmtコマンドの利用例
- 1.1 単純な数値を単位のある数値に変換 (--toオプション)
- 1.2 単位のある数値を単純な数値に変換 (--fromオプション)
- 1.3 標準入力から入力を受け付ける
- 1.4 フォーマット文字列で出力する行を指定 (--formatオプション)
- 1.5 桁区切りを行う (--groupingオプション)
- 1.6 入力のユニットサイズを変更 (--from-unitオプション)
- 1.7 出力のユニットサイズの変更 (--to-unitオプション)
- 1.8 数値の丸め方を変更 (--roundオプション)
- 1.9 接尾辞を追加 (--suffixオプション)
- 1.10 出力のパディング (--paddingオプション)
- 1.11 変換する数値のフィールドを指定 (--fieldオプション)
- 1.12 フィールドの区切り文字を指定 (-dオプション)
- 1.13 ヘッダー行に対して数値変換をしない (--headerオプション)
- 2 参考
numfmtコマンドの利用例
単純な数値を単位のある数値に変換
(--toオプション)
--toオプションは単純な数値を単位のある数値に変換できます。
--toオプションで指定できる変換方法は以下の表になります。
--toオプションの変換の指定方法
変換方法 | 説明 |
none | スケーリングを行わない(デフォルト) |
si | 1000のべき乗ごとにKやMの単位でオートスケールを行う |
iec | 1024のべき乗ごとでKやMの単位でオートスケールを行う |
iec-i | 1024のべき乗ごとでKiやMiの単位でオートスケールを行う |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$numfmt 1024 1024 $numfmt --to=none 1024 1024 $numfmt --to=si 1024 1.1K $numfmt --to=iec 1024 1.0K $numfmt --to=iec-i 1024 1.0Ki |
単位のある数値を単純な数値に変換
(--fromオプション)
--fromオプションはKやM等の接尾辞がある数値を解釈して、単純な数値として表示できます。
--fromオプションでどのような接尾辞を受け入れるかを指定できます。
指定できる変換方法は以下の表になります。
--fromオプションの変換の指定方法
変換方法 | 説明 |
none | 入力に接尾辞を受け付けない |
si | KやMの単位を1000のべき乗として単純な数値に変換 |
iec | KやMの単位を1024のべき乗として単純な数値に変換 |
iec-i | KiやMiの単位を1024のべき乗として単純な数値に変換 |
auto | KやMの単位は1000のべき乗として、 KiやMiの単位は1024のべき乗として、単純な数値に変換 |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$numfmt --from=none 1K numfmt: rejecting suffix in input: `1K' (consider using --from) $numfmt --from=si 1K 1000 $numfmt --from=iec 1K 1024 $numfmt --from=iec-i 1Ki 1024 $numfmt --from=auto 1K 1Ki 1000 1024 |
--fromオプションと--toオプションを同時に用いることで、単位のスケールを変換することができます。
コマンド例
1 |
numfmt --from=si --to=si 1000K 10000M |
実行結果
1 2 |
1.0M 10G |
標準入力から入力を受け付ける
引数に数値がない場合は、入力を標準入力から受け付けます。
ファイルから入力を受け付ける場合に利用できます。
コマンド例
1 |
echo '1K' | numfmt --from=auto |
実行結果
1 |
1000 |
フォーマット文字列で出力する行を指定
(--formatオプション)
--formatオプションは、出力する行をフォーマット文字列で指定することができます。
numfmtコマンドの受け付けた数値は'%f'で指定し、フォーマット文字列の中で一度だけ使用できます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$numfmt --format='%fm' 100 100m $numfmt --format='%05fm' 100 00100m $numfmt --format="%'5fm" 100 100m $numfmt --format='%-5fm' 100 100 m $numfmt --format='%.2fm' 123.45678 123.46m $numfmt --format='%.3fm' 123.45678 123.457m $numfmt --format='%-10.4fm' 123.45678 123.4568 m |
桁区切りを行う
(--groupingオプション)
--groupingオプションは数値を出力するときにロケールに合う桁区切りを行います。ロケールがCの場合は、影響はなく、桁区切りは行われません。
コマンド例では環境変数を削除するためにenvコマンドを通して、numfmtコマンドを実行しています。
コマンド例と実行結果
1 2 3 4 |
$env -i LC_ALL=C numfmt --grouping 1000000 1000000 $env -i LC_ALL=ja_JP.UTF-8 numfmt --grouping 1000000 1,000,000 |
入力のユニットサイズを変更
(--from-unitオプション)
--from-unitオプションは入力される数値のユニットサイズ(デフォルト:1)を変更できます。
コマンド例と実行結果
1 2 3 4 |
$numfmt --from-unit=2 20 40 $numfmt --from-unit=10 20 200 |
出力のユニットサイズの変更
(--to-unitオプション)
--from-unitオプションは出力される数値のユニットサイズ(デフォルト:1)を変更できます。
コマンド例と実行結果
1 2 3 4 5 6 |
$numfmt --to-unit=10 1000 100 $numfmt --to-unit=1024 --from=iec 1M 1024 $numfmt --to-unit=1024 --from=iec --to=iec 1M 1.0K |
数値の丸め方を変更
(--roundオプション)
--roundオプションは数値の丸め方を変更できます。指定できる方法は5つあります。
'from-zero':ゼロから離れるように丸める(round away from zero)
'towards-zero':ゼロへ向かうように丸める(round towards zero)
'up':切り上げ(正の無限大へ向かうように丸める)
'down':切り捨て(負の無限大へ向かうように丸める)
'nearest':四捨五入
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$numfmt --round=from-zero --format='%.0f' 0.4 0.5 0.6 1.4 1.5 1.6 1 1 1 2 2 2 $numfmt --round=towards-zero --format='%.0f' 0.4 0.5 0.6 1.4 1.5 1.6 0 0 0 1 1 1 $numfmt --round=up --format='%.0f' 0.4 0.5 0.6 1.4 1.5 1.6 1 1 1 2 2 2 $numfmt --round=down --format='%.0f' 0.4 0.5 0.6 1.4 1.5 1.6 0 0 0 1 1 1 $numfmt --round=nearest --format='%.0f' 0.4 0.5 0.6 1.4 1.5 1.6 0 1 1 1 2 2 |
接尾辞を追加
(--suffixオプション)
--suffixオプションは接尾辞を追加で指定することが出来ます。
コマンド例
1 |
numfmt --suffix=byte --to=iec 1024 1048576 |
実行結果
1 2 |
1.0Kbyte 1.0Mbyte |
出力のパディング
(--paddingオプション)
--paddingオプションは出力の数値に対して右寄せ又は左寄せの調整を行うことが出来ます。
これはフォーマットでの出力'%10f'や'%-10f'と同じ意味になります。
コマンド例と実行結果
1 2 3 4 5 6 |
$numfmt --padding=10 --to=iec '1024 aaa' '1048576 bbb' 1.0K aaa 1.0M bbb $numfmt --padding=-10 --to=iec '1024 aaa' '1048576 bbb' 1.0K aaa 1.0M bbb |
変換する数値のフィールドを指定
(--fieldオプション)
--fieldオプションは、cutコマンドのように変換する数値のフィールドを指定することが出来ます。
デフォルトは1で、区切り文字は空白文字になります。
コマンド例と実行結果
1 2 3 4 5 6 |
$numfmt --to=iec '1024 aaa 1048576' 1.0K aaa 1048576 $numfmt --field=3 --to=iec '1024 aaa 1048576' 1024 aaa 1.0M $numfmt --field=1,3 --to=iec '1024 aaa 1048576' 1.0K aaa 1.0M |
フィールドの区切り文字を指定
(-dオプション)
-dオプションは、指定するフィールドの区切り文字を変更できます。区切り文字のデフォルトは空白文字になります。
コマンド例と実行結果
1 2 3 4 5 6 |
$numfmt -d',' --field=1 --to=iec '1024,aaa,1048576' 1.0K,aaa,1048576 $numfmt -d',' --field=3 --to=iec '1024,aaa,1048576' 1024,aaa,1.0M $numfmt -d',' --field=1,3 --to=iec '1024,aaa,1048576' 1.0K,aaa,1.0M |
ヘッダー行に対して数値変換をしない
(--headerオプション)
--headerオプションはヘッダー行に対して、numfmtコマンドでの数値変換を行いません。
--headerオプションの数値を省略した場合は、1が指定されます。
file.txt
1 2 |
1024,header,1048576 1024,content,1048576 |
コマンド例と実行結果
1 2 3 4 5 6 |
$cat file.txt |numfmt --header -d',' --field=1,3 --to=iec 1024,header,1048576 1.0K,content,1.0M $cat file.txt |numfmt --header=2 -d',' --field=1,3 --to=iec 1024,header,1048576 1024,content,1048576 |