numfmt 输入后缀无效

numfmt 输入后缀无效

我用来numfmt将远程文件Content-Length从字节转换为 IEC 格式,即21M

$ curl -sI http://jruby.org.s3.amazonaws.com/downloads/1.7.12/jruby-bin-1.7.12.tar.gz|grep Length|cut -d' ' -f2|numfmt --from=auto --to=iec
'numfmt: invalid suffix in input: '21981488

困惑于为什么 numfmt 抱怨无效的后缀。当我拆分命令并检查 的输出cut,并手动将值回显到 时numfmt,它按预期工作

$ curl -sI http://jruby.org.s3.amazonaws.com/downloads/1.7.12/jruby-bin-1.7.12.tar.gz|grep Length|cut -d' ' -f2 -
21981488
$ echo 21981488|gnumfmt --from=auto --to=iec
21M

我在这里错过了什么吗?

答案1

看来输出curl包含回车符和数字被传递到numfmt包括一个。您可以在传递到之前删除它numfmt

curl ... | awk -F: '/Length/{sub("\r", "", $2); print $2}' | numfmt ...

此外,请注意,grepandcut通常可以替换为替代的单个命令。

答案2

coreutils-8.21 中有一个错误,我们没有正确引用错误的内容。如果您使用已经发布的 8.22 运行,则会出现更明显的错误:

numfmt: invalid suffix in input: ‘21981488\r’

请注意,如果数字后面有空格或制表符,那么 numfmt 将忽略它们(因为它使用 isblank()),但要忽略 \r 将需要使用 isspace()。我认为忽略空白是正确的。

相关内容