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: Julio C. Neves
Subject: Re: [shell-script] Comparar valores
Date: Thu, 3 Dec 2009 10:29:07 -0200

Fala Jair,
1 - para comparar se $x é maior que $y:
$ ((${x/./} > ${y/./})) && echo x maior que y
Onde a construção ${x/./} tira o ponto decimal de $x;

2 - Para comparar se $x > 10:
$ ((${x%.*} > 10)) && echo x maior que 10
Onde a construção  mata tudo à direita do ponto decimal, isto é, fica
somente a parte inteira. Tb poderia fazer como da maneira descrita em 1,
porém comparando com 100000, onde os últimos 4 zeros equivaleriam a 10.0000
sem o ponto decimal;
$ ((${x/./} > 100000)) && echo x maior que 10

3 - Vamos montar uma expr. reg. para aproveitar somente os registros
completos:
$ grep -E '^[0-9]+ .{28}$' arquivo
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
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
Como o 1o. campo é um sequencial que muda de tamanho, a expressão ^[0-9]+,
serve para dizer que começa (^) com pelo menos um (+) algarismo ([0-9]),
seguido de um branco, que por sua vez é seguido de .{28}$, que significa qq
caractere (.) ocorrendo 28 vezes ({28}), seguido do fim do registro ($).

Se quiser ser mais preciso, troque .{28}$ por [. 0-9]{28}$, que não aceita
qq caractere, mas somente o ponto o espaço em branco e algarismos.

OBS: Este fim de semana começo um treinamento de Shell no RJ (será dado em 2
fins de semana) e na próxima 2a. feira começo um em Sampa. O primeiro na
Academia Clavis e o segundo na 4Linux. Em ambos abordarei a fundo expressões
regulares. Detalhes abaixo da minha assinatura.

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11) 2125-4747 Curso de 07 a 11/12;
- Em DF ligue (61) 3223-3000 Curso de zenity 09-10/01;
- No RJ ligue (21) 2561-0867. Curso nos dias 5,6,12,13/12;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.


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]