как оценить число между диапазонами чисел, используя разные переменные в Bash

У меня есть много пар целых чисел, таких как (a, b), (c, d), (e, f) .. и так далее. Мне нужно проверить, находится ли значение 1-го элемента в диапазоне от 90% до 150% от 2-го элемента, и вывести значение как Pass.

Значения (a, b) взяты из разных столбцов файла для двух разных времен соответственно.

File1: 1 12 123 1234-text-1 12345

Файл 2 23 234 1239-text-1 12347 : 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 

Мне нужно сделать это для разных текстовых значений, таких как ‘text-2’, ‘text-3’ и т. Д. Для разных столбцов файла $ 5, $ 6 и т. Д.

Это не отвечает на весь ваш вопрос, но обратите внимание, что bash не может выполнять какую-либо арифметику с плавающей запятой:

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

Вы можете сделать bc сравнения:

 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