Estoy usando numfmt
para convertir un archivo remoto Content-Length
de 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 curl
contiene retornos de carro y elnúmeroque se pasa a numfmt
incluye 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 grep
y cut
normalmente 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.