2012-05-18 74 views
0

我有以下shell代碼。如果變量低於float,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]高於> 8.5,我想使回聲標記爲「*」。我怎麼寫這個?

感謝

回答

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