Bash
在變數內設置 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
我已經嘗試了我的語法的一些變化,但我似乎無法讓它工作。有人可以告訴我如何正確編碼嗎?提前致謝。
avg=`scale=2; expr $sum / $divisor | bc `
你是
- 將shell變數設置
scale
為 2- 使用該值計算整數除法
expr
並將其傳遞給bc
(讀取man expr
)- bc 不執行任何計算,它只輸出輸入的數字。
讓我們
bc
做這項工作:avg=$(echo "scale=2; $sum / ($stop - $start)" | bc)
現在 bc 開始進行整個計算,並設置bc比例變數。
大括號與雙引號不同。利用:
echo "${name} ${start} ${stop} ${avg}" >> ${outfile}
使用
$(...)
代替...