numfmt entrada de sufijo no válida

numfmt entrada de sufijo no válida

Estoy usando numfmtpara convertir un archivo remoto Content-Lengthde bytes al formato IEC, es decir21M

$ 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

Desconcertado por qué numfmt se queja de un sufijo no válido. Cuando divido el comando y verifico la salida de cut, y hago eco manualmente del valor numfmt, funciona como se esperaba

$ 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

¿Me estoy perdiendo de algo?

Respuesta1

Parece que la salida de curlcontiene retornos de carro y elnúmeroque se pasa a numfmtincluye uno. Podrías eliminar eso antes de pasar a numfmt:

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

Además, tenga en cuenta que grepy cutnormalmente puede sustituirse por un único comando alternativo.

Respuesta2

Hubo un error en coreutils-8.21 por el cual no citamos correctamente el contenido erróneo. Si ejecuta con el 8.22 ya lanzado, obtendrá un error más obvio:

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

Tenga en cuenta que si hay espacios o tabulaciones después del número, entonces numfmt los ignorará (ya que usa isblank()), pero para ignorar \r sería necesario usar isspace(). Creo que ignorar solo los espacios en blanco es correcto.

información relacionada