Bash
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
我在這裡錯過了什麼嗎?
coreutils-8.21 中有一個錯誤,我們沒有正確引用錯誤的內容。如果您使用已發布的 8.22 執行,則會出現更明顯的錯誤:
numfmt: invalid suffix in input: ‘21981488\r’
請注意,如果數字後面有空格或製表符,則 numfmt 將忽略它們(因為它使用 isblank()),但要忽略 \r 將需要使用 isspace()。我認為忽略空白是正確的。
似乎
curl
包含輸入的輸出和傳遞給的數字numfmt
包括一個。您可以在傳遞給之前將其刪除numfmt
:curl ... | awk -F: '/Length/{sub("\r", "", $2); print $2}' | numfmt ...
此外,請注意
grep
和cut
通常可以替換為替代的單個命令。