como avaliar o número entre um intervalo de números usando variáveis diferentes no bash

0

Eu tenho muitos pares de inteiros como (a, b), (c, d), (e, f) .. e assim por diante. Preciso verificar se o valor do 1º elemento está entre um intervalo de 90% a 150% do segundo elemento e imprimi-lo como Pass.

Os valores (a, b) são de colunas diferentes de um arquivo por dois tempos diferentes, respectivamente.

Arquivo1: 1 12 123 1234-text-1 12345

Arquivo2: 2 23 234 1239-text-1 12347

a="$(find . -name *abc.gz* -mtime 1 | xargs zcat | awk -F"," '{print $4}' | grep "text-1" | awk '{$1=$1;print}' | awk '{print $1}')"

b="$(find . -name *abc.gz* -mtime 10 | xargs zcat | awk -F"," '{print $4}' | | grep "text-1"| awk '{$1=$1;print}' | awk '{print $1}')"

#a=1234
#b=1239

b1="$(bc <<<"${b}*9/10")"
b2="$(bc <<<"${b}*15/10")"

if [ ${a} -ge ${b1} -a ${a} -le ${b2} ];
  then
  echo "PASS"
  else
  echo "FAIL"
fi

Eu preciso fazer isso para diferentes valores de texto como 'text-2', 'text-3' etc. para diferentes colunas de um arquivo $ 5, $ 6 etc.

Por favor, me guie uma única solução iterativa no Bash.

    
por Varun 21.06.2018 / 11:31

1 resposta

0

Isso não responde a toda a sua pergunta, mas observe que o bash não pode fazer nenhum tipo de aritmética de ponto flutuante:

$ if [ 1234 -ge 1115.1 -a 1234 -le 1858.5 ]; then echo ok; else echo nope; fi
bash: [: 1115.1: integer expression expected
nope

Você pode ter bc fazer as comparações:

check() {
   local result=$(echo "0.9*$2 <= $1 && $1 <= 1.5*$2" | bc)
   (( result == 1 )) && echo OK || echo NO
}
check 1234 1239    # => OK
check 1234 12390   # => NO
    
por 21.06.2018 / 17:44