Bash

numfmt 無效的後綴輸入

  • May 8, 2014

我正在使用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 ...

此外,請注意grepcut通常可以替換為替代的單個命令。

引用自:https://unix.stackexchange.com/questions/128426