如何在bash中使用不同变量计算一系列数字之间的数字

如何在bash中使用不同变量计算一系列数字之间的数字

我有很多对整数,例如 (a,b),(c,d),(e,f) .. 等等。我需要检查第一个元素的值是否位于第二个元素的 90% 到 150% 范围之间,并将该值打印为 Pass。

值 (a,b) 分别来自文件的不同列两次不同的时间。

文件1:1 12 123 1234-text-1 12345

文件2: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

我需要对文件 $5、$6 等的不同列执行不同的文本值,例如“text-2”、“text-3”等。

答案1

这并不能回答您的整个问题,但请注意 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

相关内容