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: address@hidden
Subject: Re: [shell-script] aritmetica simples - multiplicar e somar variaveis - resolvido
Date: Fri, 31 Jul 2009 10:33:13 -0300
User-agent: Thunderbird 2.0.0.22 (X11/20090608)

Pessoal,

Primeiro queria agradecer mesmo aos colegas que já postaram sugestões ...

Vou usar as sugestões para aperfeiçoar o script.

Acho que identifiquei a raiz principal do problema....

O shell parece interpretar números como "09" como octal, então
tentar somar 10 + 09 vai dar erro, pq ta somando decimal com octal

minha solução, meio gambiarra foi:

no arquivo eu tenho (hora:minuto):

10:09
12:15
5:03

cat tempo | sed 's/:0/:/g' >> tempo_ok

e ficou:

10:9
12:15
5:3

agora dá pra somar ...

Não é a solução mais elegante, mas parece resolver o problema !!!

Muito obrigado mesmo.

Abdala

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




reply via email to

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