entrada de sufixo inválido numfmt

entrada de sufixo inválido numfmt

Estou usando numfmtpara converter um arquivo remoto Content-Lengthde 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 cute 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 curlcontém retornos de carro e onúmerosendo passado para numfmtinclui 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 grepe cutgeralmente 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.

informação relacionada