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()。我認為忽略空白是正確的。

相關內容