변수 내에서 bc의 비율을 설정합니다.

변수 내에서 bc의 비율을 설정합니다.

bc를 사용하여 루프에서 두 값을 나누려고 하는데 그 값을 변수로 설정했습니다. 내 문제는 값에 소수점 이하 2자리가 있기를 원하지만 변수 내부에 정의할 때 scale=2가 제대로 작동하도록 할 수 없다는 것입니다.

이것은 내 테스트 파일입니다.

cat file.txt
Sc0000000_hap1  0   1200    32939
Sc0000000_hap1  1199    2388    28521
Sc0000001_hap1  0   1200    540

이것은 내가 실행 중인 루프입니다.

while read name start stop sum; do

   divisor=`expr ${stop} - ${start}`
   avg=`scale=2; expr $sum / $divisor | bc ` #I want 2 decimal points here
   echo ${name} ${start} ${stop} ${avg} >> ${outfile}

done < file.txt

이것은 내가 얻는 결과입니다.

Sc0000000_hap1 0 1200 27
Sc0000000_hap1 1199 2388 23
Sc0000001_hap1 0 1200 0

이것이 내가 원하는 결과입니다:

Sc0000000_hap1 0 1200 27.45
Sc0000000_hap1 1199 2388 23.99
Sc0000001_hap1 0 1200 0.43

몇 가지 구문 변형을 시도했지만 제대로 작동하지 않는 것 같습니다. 누군가 이것을 올바르게 코딩하는 방법을 말해 줄 수 있습니까? 미리 감사드립니다.

답변1

   avg=`scale=2; expr $sum / $divisor | bc `

누구세요

  • 설정하다껍데기변수 scale는 2
  • 계산하다정수해당 값을 사용하여 expr해당 값을 나누고 전달합니다 bc(읽기 man expr).
  • bc는 계산을 수행하지 않고 입력된 숫자만 출력합니다.

bc작업을 수행해 봅시다 :

avg=$(echo "scale=2; $sum / ($stop - $start)" | bc)

이제 bc가 전체 계산을 완료하기 시작합니다.기원전척도변수.


중괄호는 큰따옴표와 다릅니다. 사용:

   echo "${name} ${start} ${stop} ${avg}" >> ${outfile}

$(...)대신 사용`...`

관련 정보