我有很多对整数,例如 (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