Display integral em notação científica?

2

Eu tenho um valor integral:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
2400000

Eu atribuo a uma variável shell:

CPU_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)

Eu quero exibi-lo em formato científico a partir de um script de shell usando o bash. Além disso, eu preciso usá-lo como um argumento para um programa. Aqui está o que eu quero:

echo $CPU_FREQ
2.4+1e9

Existem alguns acessos na Web, mas não é óbvio para mim como modificá-los, porque eu geralmente trabalho com C / C ++ / Objetivo C. Veja, por exemplo, bash display integral em notação científica e Remover o script bash de notação científica .

Existe uma maneira de converter uma integral em notação científica?

Ou como mostro o valor da notação científica?

    
por jww 28.01.2016 / 07:31

2 respostas

2

Isso deve ser tão simples quanto:

printf "%g" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)

Ou usando o perl:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq | perl -e 'printf("%g\n", <>)'

O formato que você está solicitando parece um pouco estranho, mas esses dois exemplos irão imprimir um número usando notação científica.

    
por 01.02.2016 / 06:40
0

De fato, como @Jan mencionou, você pode usar printf com% e. @ Mencionaremos a opção% g, mas isso não é necessariamente uma notação científica (veja abaixo).

É baseado no printf de C que você já conhece.

CPU_FREQ=$(printf "%e" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq))
O comando

printf funciona assim:

var=1
printf "print a float variable %f, or an integer literal. %d" $var 2

Você pode usar% g,% e,% G ou% E. também, com parâmetros inteiros literais extras opcionais a, b, por exemplo:% a.bf

Resumidamente, o parâmetro opcional a é o tamanho mínimo de largura (que é ignorado se for encaminhado a saída em uma variável).

% .é imprime com exatamente b decimais, arredondando o preenchimento com zeros, se necessário. % .bg imprime o resultado com números significativos, ignorando todos os zeros à direita. (Também pode ser pensado como o menor entre% f e% e dois, mas vale a pena notar novamente, é sem zeros à direita).

Exemplos:

R=10000001
printf "%e\n"  $R
1.000000e+07
printf "%g\n" $R
1e+07

R=1.0000001 
printf "%e\n"  $R
1.000000e+00
printf "%g\n" $R
1

R=1000000.1    
printf "%e\n"  $R
1.000000e+06
printf "%g\n" $R
1e+06

R=.10000001
printf "%e\n"  $R
1.000000e-01
printf "%g\n" $R 
0.1

(% G e% E são como% g e% e, mas imprimem a saída em maiúsculas, o que se aplica apenas ao e que se transforma em um E.)

    
por 01.03.2018 / 16:58