shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] notação científica - como lidar?


From: Ricardo Acosta
Subject: Re: [shell-script] notação científica - como lidar?
Date: Thu, 1 Jun 2006 15:49:37 -0300

Júlio e demais,
obrigado pelo script e ajuda!

Também consegui solucionar utilizando a seguinte opção do "seq":
--format

Embora, no "man" diga que utiliza o mesmo tipo de formatação do "printf"
verifiquei que nem todas as opções funcionam.

no meu caso, queria substituir um número no formato:
5.00E-06
teria que utilizar o formato %.2E - como no "printf"
mas, não funcionou.
No entanto o formato  %.2e funcionou! com saida assim:
5.00e-06     <- "e" minúsculo!
para os meus propósitos isto não ocasionará problemas!
vejam a linha:
seq --format=%.2e  $ValorInicial $Incremento $ValorFinal

abaixo o script para teste.

[]s
acosta
............
acosta@clima$ cat temp.sh
#!/bin/bash
Parametro=zdepth
ValorInicial=3E-05
ValorFinal=1E-03
Incremento=1E-04

for i in $(seq --format=%.2e  $ValorInicial $Incremento $ValorFinal)
do
awk -v param=$Parametro -v valor1=$i '
        { if( $1==param ) { $2 = valor1}
        print $0
        }' data1
done


Em 01/06/06, Julio Cezar Neves -
DATAPREVRJ<address@hidden> escreveu:
Ricardo,
há mais de 10 anos, fiz um bacalho que posteriormente um colega adaptou para
o Bash, mas não o testei após a migração.

Execute-o dentro do seu programa da seginte forma:

var=$(exp2dec.sh 5.00E06 6)
echo $var
5000000.00
var=$(exp2dec.sh 5.00E-06 6)
echo $var
.000005

Isto é, passe como parâmetros a expressão e a precisão que vc deseja. A
seguir seu código:

#!/bin/bash
# Recebe numeros no formato exponencial
# e transforma-os para o formato decimal.

[ $# -eq 2 ] || {
    echo "Uso: $0: <Numero> <Precisao>"
    exit 1
}
int=${1%E*}
dec=${1#*E}
sinal='*'
[ $(echo $dec | cut -c1) = '-' ] && {
    dec=$(echo $dec | cut -c2-)
    sinal=/
}
echo "scale=$2; $int $sinal 10 ^ $dec" | bc

Abraços,
Julio Cezar Neves
Tel:+55 21 2555-6148 / +55 21 8112-9988
Fax: +55 21 2555-6154
http://www.julioneves.com


| -----Mensagem original-----
| De: Ricardo Acosta [mailto:address@hidden]
| Enviada em: quinta-feira, 1 de junho de 2006 12:15
| Para: address@hidden
| Assunto: [shell-script] notação científica - como lidar?
|
|
| Camaradas,
| vejam o seguinte arquivo:
| ....
| acosta@clima$ cat data1
| @   offline veg parameters for Forest
| @.. SOIL TYPE-DEPENDENT STATIC PARAMETERS---------------------(ISTYPE)
| zdepth       0.02
| extfrac       1.00
| bee             2.5
| phsat         -0.2
| satco  5.00E-06
| poros     0.3500
| www      0.9000
| ...
|
| Preciso fazer variar cada parâmetro ( zdepth, extfrac, bee, phsat,
| satco, poros, www) em um certo intervalo, com incremento definido.
| até aih consegui resolver tranquilo.
| utilizando "for", "seq" e "awk". Script mostrado a seguir.
|
| No entanto pra resolver a substituição dos valores do
| parâmetro: "satco"
| complicou, pq ele está em um formato diferente!
|
| mesmo usando o "printf %E" (utilizado para notação científica).
| não obtive êxito. Visto que o "seq" não aceita este tipo de notação.
| alguém teria alguma sugestão?
|
| []s
| acosta
| .........
| acosta@clima$ cat temp.sh
| #!/bin/bash
| Parametro=zdepth
| ValorInicial=1
| ValorFinal=3
| Incremento=1
|
| for i in $(seq -w $ValorInicial $Incremento $ValorFinal)
| do
| awk -v param=$Parametro -v valor1=$i '
|               { if( $1==param ) { $2 = valor1}
|               print $0
|               }' data1
| done
| .........
|
|
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de
| programação, como perl, C etc. Quem insistir em não seguir
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos








---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos











--
__________________________
Ricardo Acosta
Laboratório de Clima e Biosfera
Departamento de Ciências Atmosféricas - USP/IAG/ACA


reply via email to

[Prev in Thread] Current Thread [Next in Thread]