「numfmt(1)」-

  LINUX MANUAL PAGES

数字格式转化。将数字转为易读的格式,或者从易读的格式进行转化

命令语法格式

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(四舍五入)’的方法将数字四舍五入。如下示例:

# echo 1231231232.1131 | numfmt –round=towards-zero –format=”%.1f”

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的值将被舍入(进位),并用以下后缀之一打印:

‘K’ => 1000^1 = 10^3 (Kilo)


‘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的值将被舍入(进位),并用以下后缀之一打印:

‘K’ => 1024^1 = 210 (Kibi)


‘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的值将被舍入(进位),并用以下后缀之一打印:

‘Ki’ => 1024^1 = 210 (Kibi)


‘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 创建文章