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: Lucien Raven
Subject: Re: [shell-script] aritmetica simples - multiplicar e somar variaveis - (error token is "09")
Date: Fri, 31 Jul 2009 12:04:57 -0700 (PDT)

--- Em sex, 31/7/09, address@hidden <address@hidden> escreveu:

> 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
> 

Olá Emmanuel,

As soluções elegantes do Júlio e do Cléoson provavelmente já resolveram o seu 
problema.

O que vi que poderia ser alterado no seu script é a linha:

>     TEMPO=$[(HORA*60)+MINUTO]

Substitua por:

TEMPO=$[(HORA*60)+10#$MINUTO]

Veja:

# HORA="30"
# echo $HORA
30

# MINUTO="09"
# echo $MINUTO
09

# TEMPO=$[(HORA*60)+MINUTO]
-bash: 09: value too great for base (error token is "09")

# TEMPO=$[(HORA*60)+10#$MINUTO]
# echo $TEMPO
1809

O "10#" força que a variável trabalhe na Base Numérica indicada (no caso, base 
10). :)


LR :>


      
____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com


reply via email to

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