[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] comparação numérica
From: |
MrBiTs |
Subject: |
Re: [shell-script] comparação numérica |
Date: |
Tue, 8 Feb 2005 21:13:49 -0300 |
> Eu quero testar o arquivo /etc/ntp/drift (às vezes é /etc/ntp.drift)
> normalmente é um número com 3 casa decimais, usando '.' (ponto). Se esse
> numero estiver maior que +-500 (para cada lado) é melhor apagar antes de
> iniciar o ntpd.
> Também tem um agravante que nunca vi um arquivo com valor errado
> (500.000 ou -500.000 supostamente), e não consegui forçar o aparecimento
> de um.
Sem grandes complicacoes:
$ A=500.175
$ perl -e "if ( '$A' gt 500 ) { print 'Maior que 500\n'; } else { print 'Menor
que 500\n'; }"
Maior que 500
$
Em "shell puro", poderiamos fazer algo como
A=500.175
A=`echo $A | tr -d "."`
if [ $A -gt 500000 ] ; then
Em awk, algo como
$ cat /etc/ntp.drift | awk '{ print ($1 > 500) ? "true" : "false" }'
As teorias sao:
Comparacoes do tipo -gt, -eq, -lt, -ne esperam valores inteiros
Comparacoes em linguagens como perl e awk compreendem numeros reais.
Somente a titulo de curiosidade
$ A=500.175
$ time perl -e "if ( '$A' gt 500 ) { print 'Maior que 500\n'; } else { print
'Menor que 500\n'; }"
Maior que 500
real 0m0.006s
user 0m0.000s
sys 0m0.010s
$ time echo 500.175 | awk '{ print ($1 > 500) ? "true" : "false" }'
true
real 0m0.006s
user 0m0.000s
sys 0m0.010s
[As partes desta mensagem que não continham texto foram removidas]