2012-05-18 3 views
0

다음 쉘 코드가 있습니다.변수가 float보다 작 으면 파일에 파일 쓰기

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 

코드는 두 개의 파일에서 이름, 두 번째 이름 및 일부 등급을 읽습니다. 그 후 MED [$ i] 인 평균 등급을 평가합니다. 어쨌든 MED [$ i]가 8.5 이상인 경우에만 에코를 "*"로 표시하려고합니다. 내가 어떻게 쓸 수 있니?

감사합니다, (10)에 의해 값을 곱 임시 변수에 저장하고 값이 여전히 비는 것을 문제가있는 경우 85

과 비교 BC를 사용

답변

1

: 곱셈을하고, 예를 들어,

tmpvar=`printf "%0.0f" $float_value` 

배쉬는 비교 연산을 위해 부동 소수점 연산에 대한 지원 내장하고 있지 않기 때문에 : BC를 사용하는 다음의 정수는, 당신은 사용할 수 있습니다

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 
관련 문제