数字格式转化。将数字转为易读的格式,或者从易读的格式进行转化
命令语法格式
numfmt [OPTION]… [NUMBER]…
命令描述
重新格式化数字NUMBER。如果没有指定NUMBER,则从标准输入中读取数字。
命令支持的选项及含义
长选项的必填参数,在短选项中也必须提供。
–debug
将可能的错误用法的警告消息打印到标准错误。
-d, –delimiter=X
使用字符X作为输入字段分隔符(默认值:空格)。注意:使用非默认分隔符会关闭自动填充。
–field=FIELDS
转换输入字段FIELDS中的数字。默认值1,即默认只转换第一列。FIELDS支持cut(1)风格的字段范围,参见「FIELD支持cut(1)风格的字段范围」部分。
–format=FORMAT
使用printf风格的浮点FORMAT字符串。FORMAT必须包含一个’%f’指令,以及可选的`’`、`-`、’0’、宽度、精度修饰符。`’`修饰符(%’f) 将启用–grouping;’-‘修饰符将启用左对齐–padding;宽度修饰符将启用右对齐–padding;’0’宽度修饰符(不带’-‘修饰符)将在数字上生成前导零,直到指定的宽度。像’%.1f’这样的精度规格将会覆盖由–to选项自动缩放而从输入数据集中确定的精度。
–from=UNIT
根据单位UNIT来缩放输入的数字。见下面的单位。默认值不是缩放,为none,这意味着如果有后缀(例如’M’,’G’)会触发错误。参见「单位选项」部分。
–from-unit=N
指出输入数字的单位大小。默认为1。例如,如果输入数字“10”代表10个512字节的单元,则使用’–from-unit=512’。
–grouping
根据当前语言环境的分组规则(例如,千位分隔符字符,通常’.’(点)或’,’逗号)将输出数字中的数字分组。该选项在’POSIX/C’语言环境中不起作用。
–header[=N]
打印第N行(默认值:1),不进行任何转换。
–invalid=MODE
对输入错误的默认操作是立即用状态码2退出,–invalid=’abort’为该默认模式。在“fail”模式下,为每个转换错误输出一个警告,然后以状态2退出。在’warn’模式下,即使在存在转换错误的情况下,退出状态也始终为0,模式为’ignore’不打印任何诊断信息。
–padding=N
通过向输出数字添加空格的方式,将输出数字填充到N个字符。如果N是正数,则数字将右对齐。如果N是负数,则数字将左对齐。默认情况下,数字会根据输入行的宽度自动对齐(仅适用于默认分隔符)。
–round=METHOD
在转换数字表示时,按照可以是’up(上)’,’down(下)’,’from-zero(从零,默认的)’,’towards-zero(向零靠近)’,’nearest(四舍五入)’的方法将数字四舍五入。如下示例:
1231231232.1
# echo 232.1001 | numfmt –round=from-zero –format=”%.1f”
232.2
# echo 232.11 | numfmt –round=up –format=”%.1f”
232.2
# echo 232.11 | numfmt –round=down –format=”%.1f”
232.1
–suffix=SUFFIX
将SUFFIX添加到输出数字,并在输入数字中接受可选的SUFFIX。
–to=UNIT
根据单位UNIT自动缩放输出数字。参见「单位选项」部分。默认值不是缩放,就是说打印所有数字的数字。
–to-unit=N
指定输出单位大小(而不是默认值的1)。当希望输出数字表示其他单位时,可以使用此选项。例如,用1KB的块表示’4,000,000’字节,使用’–to =si –to-unit=1000’。后缀的处理与’–from=auto’相同。
-z, –zero-terminated
行以NUL字符分割。没有该选项时,默认为NEWLINE。
–help
显示帮助信息并退出。
–version
显示版本信息并退出。
单位选项
none
不执行缩放。对于输入的数字,不接受任何后缀,并且该数字后面的任何结尾字符都将触发错误。对于输出号码,将打印所有数字的所有位。
auto
‘auto’只能与–from一起使用。用这种方法,将具有’K’,’M’,’G’,’T’,’P’,’E’,’Z’,’Y’后缀的数字解释为SI值, ,’Mi’,’Gi’,’Ti’,’Pi’,’Ei’,’Zi’,’Yi’后缀被解释为IEC值。
1K = 1000, 1Ki = 1024, 1M = 1000000, 1Mi = 1048576,
si
根据国际单位制(SI)标准自动缩放数字。对于输入号码,请接受以下后缀之一。对于输出数字,大于1000的值将被舍入(进位),并用以下后缀之一打印:
‘M’ => 1000^2 = 10^6 (Mega)
‘G’ => 1000^3 = 10^9 (Giga)
‘T’ => 1000^4 = 1012 (Tera)
‘P’ => 1000^5 = 1015 (Peta)
‘E’ => 1000^6 = 1018 (Exa)
‘Z’ => 1000^7 = 1021 (Zetta)
‘Y’ => 1000^8 = 1024 (Yotta)
iec
根据国际电工委员会(IEC)标准自动调整数字。对于输入号码,请接受以下后缀之一。对于输出数字,大于1024的值将被舍入(进位),并用以下后缀之一打印:
‘M’ => 1024^2 = 220 (Mebi)
‘G’ => 1024^3 = 230 (Gibi)
‘T’ => 1024^4 = 240 (Tebi)
‘P’ => 1024^5 = 250 (Pebi)
‘E’ => 1024^6 = 260 (Exbi)
‘Z’ => 1024^7 = 270 (Zebi)
‘Y’ => 1024^8 = 280 (Yobi)
iec选项使用单个字母后缀(例如’G’),它是很符合标准化,因为iec标准建议使用双字母符号(例如’Gi’),但实际上,这种方法很常见。请与iec-i选项进行比较。
iec-i
根据国际电工委员会(IEC)标准自动调整数字。对于输入号码,请接受以下后缀之一。对于输出数字,大于1024的值将被舍入(进位),并用以下后缀之一打印:
‘Mi’ => 1024^2 = 220 (Mebi)
‘Gi’ => 1024^3 = 230 (Gibi)
‘Ti’ => 1024^4 = 240 (Tebi)
‘Pi’ => 1024^5 = 250 (Pebi)
‘Ei’ => 1024^6 = 260 (Exbi)
‘Zi’ => 1024^7 = 270 (Zebi)
‘Yi’ => 1024^8 = 280 (Yobi)
FIELD支持cut(1)风格的字段范围
N 从第一列计算的第N列;
N- 从第N列到最后一列;
N-M 从第N列到第M列;
-M 从第一列到第M列;第M列包含在内;
– 所有的列;
如果要指定多个字段范围,可以使用逗号分隔。比如:1,3-4,7
退出状态
为0的情况
所有的数字成功转化,则状态码为0。
还有一种情况是,使用了–invalid=’warn’,即使出现了错误也不会退出,会执行完所有的转换,然后以状态码0退出,但会打印警告信息。
而如果使用了–invalid=’ignore’,即使出现了错误也不会退出,会执行完所有的转换,然后以状态码0退出,但不会打印警告信息。
为2的情况
默认,只要出现了转换错误,则立即结束,并以状态码2退出。
但是,如果使用了–invalid=’fail’,则出现了错误也不会退出,会执行完所有的转换,然后以状态码2退出。
注意事项
命令numfmt区别与printf(1),printf(1)更侧重与格式化,而numfmt更侧重与进制及单位之间的转化。
使用示例
$ numfmt –to=si 1000
-> “1.0K”
$ numfmt –to=iec 2048
-> “2.0K”
$ numfmt –to=iec-i 4096
-> “4.0Ki”
$ echo 1K | numfmt –from=si
-> “1000”
$ echo 1K | numfmt –from=iec
-> “1024”
$ df -B1 | numfmt –header –field 2-4 –to=si
$ ls -l | numfmt –header –field 5 –to=iec
$ ls -lh | numfmt –header –field 5 –from=iec –padding=10
$ ls -lh | numfmt –header –field 5 –from=iec –format %10f
相关手册
printf(1)
完整在线手册:http://www.gnu.org/software/coreutils/numfmt
查看info手册:info ‘(coreutils) numfmt invocation’
参考文献
- man 1 numfmt, version GNU coreutils 8.26
更新日志
- 05/31/2018 创建文章