numfmt entrada de sufixo inválida

1

Estou usando numfmt para converter o Content-Length de bytes de um arquivo remoto para o formato IEC, ou seja, 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

Perplexo com por que numfmt reclamando de sufixo inválido. Quando eu divido o comando e verifico a saída de cut , e manualmente ecoo o valor para numfmt , ele funciona como 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?

    
por hanxue 08.05.2014 / 06:54

2 respostas

2

Houve um bug no coreutils-8.21 onde não citamos o conteúdo incorreto corretamente. Se você correr com o já lançado 8.22, ele dará 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, o numfmt irá ignorá-los (já que usa isblank ()), mas ignorar o requereria usando isspace (). Ignorando apenas espaços em branco é correto eu acho.

    
por 08.05.2014 / 17:48
2

Parece que a saída de curl contém retornos de carro e o número sendo 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 podem ser substituídos por um único comando alternativo.

    
por 08.05.2014 / 07:07