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