Como comparar dois números no awk?

5

Este exemplo funciona bem:

awk -v num1=5999 -v num2=5999  'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal

Este exemplo não funciona bem:

awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal

No segundo exemplo, os números comparados são diferentes. Por que não imprimir "não é igual"?

    
por nowy1 17.12.2012 / 16:35

1 resposta

11

Você está atingindo o limite da precisão dos números do awk.

Você pode forçar a comparação a ser uma comparação de string com:

awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 '
  BEGIN{ print (num2""==num1) ? "equal" : "not equal" }'

(Aqui a concatenação com a string vazia força-os a serem considerados como strings em vez de números).

Se você quiser fazer comparações numéricas, terá que usar uma ferramenta que funcione com números de precisão arbitrária, como bc ou python .

    
por 17.12.2012 / 16:58