[Linux/Floating Point] Shell Script로 부동소수점 연산하기

리눅스 쉘스크립트 프로그래밍은 간단하면서도 매우 강력한 능력을 발휘하는 언어(?)입니다. 여기서 부동소수점 연산을 시도해 볼려고 하면 다음과 같은 문제들이 있습니다.

[code]> i=1+2
> echo $i
1+2[/code]
생각했던데로 나오지 않는군요. 하지만 쉘에서 사용할 수 있는 expr이라는 명령이 있습니다.

[code]> i=`expr 1 + 2`
> echo $i
3[/code]
여기서 expr을 사용할때 숫자와 연산자 사이에 공백이 들어간다는것을 유의합시다. 연산이 정상적으로 이루어짐을 알 수 있습니다.

[code]> i=`expr 1.2 + 2.5`
expr: non-numeric argument[/code]
하지만 부동소수점 연산이 안되는군요. 큰일입니다. 어떻게 방법이 없을까요.

[code]> i=`echo “1.2 + 2.5″|bc`
> echo $i
3.7[/code]
bc를 이용해서 해결해보았습니다.

[code]> i=`echo “1.22 2.51″|awk ‘{printf “%.2f”, $1 + $2}’`
> echo $i
3.73[/code]
이번엔 자체적으로 부동소수점 연산을 지원하는 awk를 이용하여 해결해 보았습니다. 출력포맷의 %.2f를 사용하여 소수점 이하 2번째 자리까지 사용하여 반올림 하도록 하였습니다.