Remover script de notação científica bash

4

Quando eu converto MB em GB, estou ficando abaixo da saída. Eu quero essa saída no formato normal. Quando uso bc , estou recebendo um erro. O arquivo de texto contém quase 100 linhas como essa.

Eu quero imprimir isso na saída normal, (sem notação):

1.14441e-07
4.95911e-07
3.05176e-07
1.90735e-07
3.05176e-07

Comandos:

$ DIVISOR=104857600
$ sudo  du --max-depth=1 /home/xxx | tail -1 | \
      awk -v DIVISOR=104857600 '{print $1/DIVISOR}'
1.14441e-07
    
por ppnair 09.12.2013 / 08:04

2 respostas

4

awk tem uma função sprintf, que dá acesso ao especificador de formato printf "f".

echo  .123456 | awk '{ print sprintf("%.9f", $1); }'

produz

0.123456000
    
por 09.12.2013 / 08:37
5

Para controlar a formatação da saída, você pode usar printf diretamente de awk ou diretamente via shell.

No entanto, você também pode controlar a saída diretamente usando du . Por exemplo, você pode especificar -h para produzir os resultados em formatos legíveis por humanos.

Exemplos

$ du -h --max-depth=1 /home/saml/apps | tail -1
9.0G    /home/saml/apps

$ du -h --max-depth=1 /home/saml/apps/gCAD3D  | tail -1
1.1M    /home/saml/apps/gCAD3D

Formatando usando printf

Mas, como você percebeu, você perde a resolução com esse método. Portanto, se você realmente quiser manter um grau mais alto de resolução, será forçado a usar os valores de du em um nível inferior e, em seguida, formatar a saída para se adequar a cada unidade de nível superior desejada.

Exemplo

Em MBs usando du .

$ du -m --apparent-size --max-depth=1 /home/saml/apps | tail -1
8916    /home/saml/apps

Usando awk + printf .

$ DIVISOR=10487600
$ du --apparent-size --max-depth=1 /home/saml/apps | \
      tail -1 | awk -v D=$DIVISOR '{printf "%.9f\n", $1/D}'
0.870499638

Você pode controlar a precisão desejada alterando o argumento para printf . Aqui estão 5 lugares.

$ DIVISOR=10487600
$ du --apparent-size --max-depth=1 /home/saml/apps | \
      tail -1 | awk -v D=$DIVISOR '{printf "%.5f\n", $1/D}'
0.87050

Observe que é necessário arredondá-lo corretamente sempre que você decidir cortar a precisão.

    
por 09.12.2013 / 09:02