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キャリッジリターンが含まれており、番号に渡されるにはnumfmt1 つが含まれています。 に渡す前にそれを削除できますnumfmt

curl ... | awk -F: '/Length/{sub("\r", "", $2); print $2}' | numfmt ...

さらに、grepおよび はcut通常、代替の単一コマンドに置き換えられることに注意してください。

答え2

coreutils-8.21 には、誤った内容を正しく引用しないというバグがありました。すでにリリースされている 8.22 で実行すると、より明らかなエラーが発生します。

numfmt: invalid suffix in input: ‘21981488\r’

数字の後にスペースまたはタブがある場合、numfmt はそれらを無視します (isblank() を使用するため)。ただし、\r を無視するには isspace() を使用する必要があります。空白だけを無視するのが正しいと思います。

関連情報