我有以下shell代码。
i=0
while read name pren med
do
i=`expr $i + 1`
while read name2 pren2 n1 n2 n3 n4 n5 n6 n7
do
if [ $name$pren = $name2$pren2 ]
then
MED[$i]=`expr $n1 + $n2 + $n3 + $n4 + $n5 + $n6 + $n7`
MED[$i]=`echo "scale=2;${MED[$i]}/7" | bc -l `
MED[$i]=`echo "scale=2;($med+${MED[$i]})/2" | bc -l `
PERS[$i]="$name $pren ${MED[$i]}"
*echo ${PERS[$i]} >> notefinale
fi
done <$2
done <$1
代码从2个文件中读取名称,秒名和一些等级。之后,它评估MED [$ i]的平均等级,无论如何我想用“*”标记回声,只有MED [$ i]高于&gt; 8.5。我怎么写这个?
由于
答案 0 :(得分:1)
使用bc,将值乘以10,将其存储在临时变量中,然后将其与85进行比较。
如果您遇到使用bc后该值仍为非整数的问题,则可以使用:
tmpvar=`printf "%0.0f" $float_value`
bash没有内置支持比较操作的浮点运算,因此,例如,进行乘法运算:
med_int=`echo "scale=0; ${MED[$i]} * 10" | bc -l`
# force into an integer
med_int=`printf "%0.0f" $med_int`
if [ $med_int -gt 85 ]; then
echo ${PERS[$i]} >> notefile
fi