Estou usando numfmt
para converter um arquivo remoto Content-Length
de bytes para o formato IEC, ou seja21M
$ 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
Perplexo com o motivo de numfmt reclamar de sufixo inválido. Quando divido o comando e verifico a saída de cut
e ecoo manualmente o valor para numfmt
, ele funciona conforme o esperado
$ 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
Estou faltando alguma coisa aqui?
Responder1
Parece que a saída de curl
contém retornos de carro e onúmerosendo passado para numfmt
inclui um. Você pode remover isso antes de passar para numfmt
:
curl ... | awk -F: '/Length/{sub("\r", "", $2); print $2}' | numfmt ...
Além disso, observe que grep
e cut
geralmente pode ser substituído por um único comando alternativo.
Responder2
Houve um bug no coreutils-8.21 onde não citamos o conteúdo errado corretamente. Se você executar com o 8.22 já lançado, ocorrerá um erro mais óbvio:
numfmt: invalid suffix in input: ‘21981488\r’
Observe que se houver espaços ou tabulações após o número, então numfmt irá ignorá-los (pois usa isblank()), mas para ignorar \r seria necessário usar isspace(). Ignorar apenas os espaços em branco está correto, eu acho.