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

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

Re: [shell-script] Ajuda para cálculo


From: Eliphas Levy Theodoro
Subject: Re: [shell-script] Ajuda para cálculo
Date: Fri, 11 Nov 2005 15:42:36 -0200 (BRST)

Mauricy Maiorino, @ 09/11/05 - 08:46:
> Tenho o arquivo:
> kafer 09020000000000 0001000042 funcamp
> mjuliato 34000000000000 0001000170 ic
> mbueno 09000000000000 0002000045 ifch
> mbueno 09000000000000 0004000005 ia
>
> A algum tempo atras o Alexandre Vieira me ajudou, pois na epoca eu precisa
> deixar o arquivo desta forma:
>
> kafer 09020000000000 42 funcamp
> mjuliato 34000000000000 170 ic
> mbueno 09000000000000 45 ifch
> mbueno 09000000000000 5 ia
[...]
> Mas agora eu preciso manter no arquivo original este campo, pois ele
> indica a quantidade de copias e o numero de paginas impressas de um
> usuario. Como faço para em tempo de leitura deste arquivo, multiplicar os
> 4 primeiros digitos deste campo (Ex. 0002000045 ===> 0002 x 000045) e
> obter o total, mesmo que for em outro arquivo?? Não sei qual seria a
> melhor maneira de fazer isto.

Tipo...

Juntando a idéia de tirar os zeros da segunda parte, ficaria mais ou
menos isso:

$ awk '{
     cp1=$1; cp2=$2; cp4=$4; cop=substr($3,1,4);
     imp=substr($3,5,6)*1; total=cop*imp;
     print cp1" "cp2" "cop" "imp" "cp4" "total;
}' arq
kafer 09020000000000 0001 42 42
mjuliato 34000000000000 0001 170 170
mbueno 09000000000000 0002 45 90
mbueno 09000000000000 0004 5 20

A multiplicação do imp=substr($3,5,6)*1 simplesmente foi pra tirar os
zeros à esquerda. Mais prático, já que eu já estava definindo a
variável ':)

Aproveitando, vai em shell também (deve ficar bem mais lento):

$ while read cp1 cp2 cp3 cp4; do
     cop=${cp3:0:4}
     imp=${cp3:4:6}
     total=`echo $cop*$imp|bc`
     imp=`echo $imp|sed s/^0*//`
     echo $cp1 $cp2 $cop $imp $cp4 $total
done < arq


-- 
Eliphas

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



reply via email to

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