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

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

Re: [shell-script] Comparar valores


From: Leandro Santiago
Subject: Re: [shell-script] Comparar valores
Date: Wed, 2 Dec 2009 21:32:55 -0200

cara, o bash não faz cálculo em ponto flutuante (com vírgula), mas a
calculadora bc faz.

Dê uma olhada nisso:
echo 2.0 == 2.000 | bc -l
1

echo 2.0 == 1.23 | bc -l
0

O bc executa e devolve na tela 1 se é true e 0 se é false. Mas isto é
exatamente o oposto do que os comandos no linux retornam.

Aí é sí inverter pra usar no shell:

if (( $(echo 2.0 == 1.006 | bc -l) )); then
echo isso é falso
fi

Aí vc pode até criar uma função que já deixe isso implicito, ou algo assim.
Bem, é uma solução para o promeiro problema, mas isso só funciona no bash.
Para usar o test, use em vez de (( )), [ ].

2009/12/2 Jair Santanna <address@hidden>

>
>
> Caros, tenho um if do tipo:
> if [ $x -ge $y] && [$x -ge 10 ]; then
> no entanto tanto $x quanto $y é uma variável vinda de um resultado do
> bc (Ex: 187.456 e 42.53)! como eu faço pra essa comparação no if dar
> certo?
>
> outra pergunta é o seguinte:
> eu estou filtrando um arquivo retirando as linhas que contém "|" e
> necessito ainda retirar as linhas que possuem um campo vazio.
> Até a parte do "|" eu fiz ... mas não consigo "grepar" o campo vazio.
> cat $arquivo | awk '{print $1 $2}' | grep -v "|"
>
> o arquivo original é:
> 1 3805.3000 14623222.7282 3824.0322 | 1938.8375 9613106.3892
> 3100.5009 | 337.2250 300369.1373 548.0594
> 2 3488.9500 12899910.9205 3591.6445 | 1779.0625 8485836.0882
> 2913.0458 | 394.3541 378363.1307 615.1122
> 3 | 2056.0650 10657926.4011 3264.6479 | 345.0095 446662.5792
> 668.3281
> 4 2395.1500 7573923.9362 2752.0762 | 1197.5750 5881227.4358
> 2425.1242 | 403.5875 411857.8703 641.7615
> 5 3640.4250 13285972.4044 3644.9927 | 1863.7000 8278214.4591
> 2877.1886 | 326.4041 253348.7635 503.3376
> 6 | 2187.1375 11898716.2496 3449.4515 | 305.3950 274575.2704
> 523.9993
> 7 3049.7500 9555864.2435 3091.2560 | 1607.5750 6153174.9558
> 2480.5594 | 286.1200 231689.1085 481.3409
> 8 2690.8550 9990945.0768 3160.8456 | 1416.5650 5937139.9383
> 2436.6247 | 277.1750 231953.6237 481.6156
> 9 3359.5175 12599418.9737 3549.5660 | 1714.3962 8214373.9095
> 2866.0729 | 527.6541 670845.0793 819.0513
> 10 3876.0000 15016463.8461 3875.1082 | 1981.4650 9505323.7970
> 3083.0705 | 394.6995 423310.0278 650.6227
> 11 3146.9250 6242632.6044 2498.5260 | 1573.4625 6027675.8231
> 2455.1325 |
> 12 | |
> 13 2209.9250 5495139.2506 2344.1713 | 1141.6375 3381980.1582
> 1839.0160 | 234.1866 188748.0349 434.4514
> 14 2435.2500 3321308.7756 1822.4458 | 1217.6250 3516355.7761
> 1875.1948 | 328.1458 266152.6066 515.8998
> 15 | | 324.0508 383277.1339 619.0938
> 16 4117.0750 17223157.3531 4150.0791 | 2096.0400 11469113.2536
> 3386.6079 | 483.7125 577614.8352 760.0097
> 17 3931.5750 15587941.8916 3948.1567 | 2012.5500 10065638.0535
> 3172.6389 | 538.3666 677216.6453 822.9317
> 18 3593.5300 12922503.8411 3594.7884 | 1837.6900 8137569.8555
> 2852.6426 | 494.6041 623128.9664 789.3851
> 19 3752.8000 14978281.1897 3870.1784 | 1915.6500 9493854.7291
> 3081.2099 | 386.3250 365627.9316 604.6717
> 20 2290.5750 9786021.4301 3128.2617 | 1221.1000 5547771.9194
> 2355.3708 | 399.6166 403369.8248 635.1140
>
> "o arquivo grepado é:"
> 1 3805.3000 1938.8375 337.2250
> 2 3488.9500 1779.0625 394.3541
> 4 2395.1500 1197.5750 403.5875
> 5 3640.4250 1863.7000 326.4041
> 7 3049.7500 1607.5750 286.1200
> 8 2690.8550 1416.5650 277.1750
> 9 3359.5175 1714.3962 527.6541
> 10 3876.0000 1981.4650 394.6995
> 11 3146.9250 1573.4625
> 13 2209.9250 1141.6375 234.1866
> 14 2435.2500 1217.6250 328.1458
> 16 4117.0750 2096.0400 483.7125
> 17 3931.5750 2012.5500 538.3666
> 18 3593.5300 1837.6900 494.6041
> 19 3752.8000 1915.6500 386.3250
> 20 2290.5750 1221.1000 399.6166
>
> perceba que a linha 11 precisa ser retirada
>
> grato pela ajuda
>
> JJ.Santanna
>
>  
>


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



reply via email to

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