我用来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 ...
此外,请注意,grep
andcut
通常可以替换为替代的单个命令。
答案2
coreutils-8.21 中有一个错误,我们没有正确引用错误的内容。如果您使用已经发布的 8.22 运行,则会出现更明显的错误:
numfmt: invalid suffix in input: ‘21981488\r’
请注意,如果数字后面有空格或制表符,那么 numfmt 将忽略它们(因为它使用 isblank()),但要忽略 \r 将需要使用 isspace()。我认为忽略空白是正确的。