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

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

Re: [shell-script] aritmetica simples - multiplicar e somar variaveis -


From: Julio C. Neves
Subject: Re: [shell-script] aritmetica simples - multiplicar e somar variaveis - (error token is "09")
Date: Fri, 31 Jul 2009 17:50:05 -0300

Céoson, isso ocorre pq não testei e, como o número começa por zero, ele acha
que é um octal e passa a dar erro em 08 e 09.

Para usar o bc, proponho a seguinte sintaxe:

bc <<< $(cut -f1 -d: tempo | paste -sd+)*60+$(cut -f2 -d: tempo | paste
-sd+)
-- 
Abraços,
Julio
Cursos de Shell e Zenity?
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- No RJ ligue (21) 2561-0867;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.


2009/7/31 Cléoson Barreto <address@hidden>

>
>
> Olá!
>
> Júlio, acho que nesta solução volta a acontecer o problema que tinha
> sido falado antes. Quando o minuto for menor que 10 (por exemplo, 1:09) dá
> erro na soma. Veja:
>
>
> $ cat tempo
> 0:48
> 1:05
> 1:10
> 1:10
> 1:10
> 1:17
> 1:19
> 1:23
> 2:09
> $ echo $[$[$(cut -f1 -d: tempo|paste -sd+)]*60+$(cut -f2 -d: tempo|paste
> -sd+)] minutos
> bash: 9*60+48+05+10+10+10+17+19+23+09: valor muito grande para a base
> (error
> token is "09")
>
> Pra tentar resolver isso, eu coloquei um " | bc" depois do último
> "paste -sd+".
>
> $ echo $[$[$(cut -f1 -d: tempo|paste -sd+)]*60+$(cut -f2 -d: tempo|paste
> -sd+ | bc)] minutos
> 691 minutos
>
> --
> []'s
> Cléoson.
> http://farinhadigital.blogspot.com/
>
> 2009/7/31 Julio C. Neves <address@hidden <julio.neves%40gmail.com>>
>
> >
> >
> > Fala Emmanuel,
> > não resisto a um one-liner. :)
> >
> > $ echo $[$[$(cut -f1 -d: tempo|paste -sd+)]*60+$(cut -f2 -d: tempo|paste
> > -sd+)] minutos
> > 562 minutos
> >
> > Abraços,
> > Julio
> >
> >
> > 2009/7/31 address@hidden <shell-script%40abdala.org><shell-script%
> 40abdala.org> <
> > address@hidden <shell-script%40abdala.org> <shell-script%
> 40abdala.org>>
>
> >
> > >
> > >
> > > Saudações aos colegas da lista.
> > >
> > > Bom, o problema parece bem simples, mas como sou iniciante, já quebrei
> > > a cabeça, ja fiz de varias formas,
> > > e não tá dando certo.
> > >
> > > Bom, tenho um arquivo (tempo.txt) com varias linhas no formato
> > > hora:minuto ...
> > >
> > > $ cat tempo
> > > 0:48
> > > 1:05
> > > 1:10
> > > 1:10
> > > 1:10
> > > 1:17
> > > 1:19
> > > 1:23
> > > ... (sao 71 valores)
> > >
> > > Estou precisando calcular o valor total em minutos :
> > >
> > > ((hora * 60) + minutos))
> > >
> > > de cada linha ....
> > >
> > > Bom a maneira que tentei fazer foi a seguinte:
> > >
> > > estou usando um cut para separar a hora dos minutos e jogar cada valor
> > > em um arquivo separado:
> > >
> > > cat tempo | cut -f1 -d: > tempo_hora
> > >
> > > cat tempo | cut -f2 -d: > tempo_minuto
> > >
> > > em seguida conto o numero de linhas do arquivo tempo:
> > >
> > > LINHAS=`cat tempo | wc -l`
> > >
> > > para poder fazer um for ....
> > >
> > > for i in `seq $LINHAS`
> > > do
> > > HORA=`awk NR==$i tempo_hora`
> > > MINUTO=`awk NR==$i tempo_minuto`
> > > TEMPO=$[(HORA*60)+MINUTO]
> > > echo $TEMPO >> total_minutos
> > > done
> > >
> > > Segue o script :
> > >
> > > +++++++++++++++++++++++++++++++++++++
> > >
> > > #!/bin/bash
> > >
> > > cat tempo | cut -f1 -d: > tempo_hora
> > >
> > > cat tempo | cut -f2 -d: > tempo_minuto
> > >
> > > LINHAS=`cat tempo | wc -l`
> > >
> > > rm -rf total_minutos
> > >
> > > for i in `seq $LINHAS`
> > > do
> > > HORA=`awk NR==$i tempo_hora`
> > > MINUTO=`awk NR==$i tempo_minuto`
> > > TEMPO=$[(HORA*60)+MINUTO]
> > > echo $TEMPO >> total_minutos
> > > done
> > >
> > > +++++++++++++++++++++++++++++++++++++
> > >
> > > Ele só processa até a linha 56, e dá o erro ....
> > >
> > > line 15: 09: valor muito grande para a base (error token is "09")
> > >
> > > so que na linha 56 do arquivo principal "tempo" tem o valor : 1:06:29
> > > e na 57 tem: 1:09:17
> > >
> > > ou seja, aparentemente valores iguais aos outros ....
> > >
> > > Pode ser um erro básico, mas ja procurei bastante e não to entendendo o
> > > que está errado.
> > >
> > > Muito obrigado a qualquer colega que possa dar uma ajuda;
> > >
> > > Emmanuel Abdala
> > > Anápolis - GO
> > >
> > >
> > >
> >
> > --
> > Abraços,
> > Julio
> > Cursos de Shell e Zenity?
> > - Em SP ligue (11) 2125-4747;
> > - Em DF ligue (61) 3223-3000;
> > - No RJ ligue (21) 2561-0867;
> > - Turmas fechadas em outras cidades ligue (21) 8112-9988.
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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