![如何在bash中使用不同变量计算一系列数字之间的数字](https://linux22.com/image/135580/%E5%A6%82%E4%BD%95%E5%9C%A8bash%E4%B8%AD%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E5%8F%98%E9%87%8F%E8%AE%A1%E7%AE%97%E4%B8%80%E7%B3%BB%E5%88%97%E6%95%B0%E5%AD%97%E4%B9%8B%E9%97%B4%E7%9A%84%E6%95%B0%E5%AD%97.png)
我有很多对整数,例如 (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