Bash에서 다양한 변수를 사용하여 일련의 숫자 사이의 숫자를 계산하는 방법

Bash에서 다양한 변수를 사용하여 일련의 숫자 사이의 숫자를 계산하는 방법

(a,b),(c,d),(e,f)..etc와 같은 많은 정수 쌍이 있습니다. 첫 번째 요소의 값이 두 번째 요소의 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

관련 정보