2013-05-30 1 views
3

gawk가 소수점 문자로 쉼표 ,을 사용하여 숫자를 구문 분석하려고합니다. 그래서 나는 fr_FR.utf-8LC_NUMERIC를 설정했지만 작동하지 않습니다gawk 부동 소수점 현지화

echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk '{printf ("%.2f\n", $1 + 0) }' 
123.00 

이 솔루션은 옵션 --posix 또는 export POSIXLY_CORRECT=1을 지정하는 것입니다하지만,이 경우는 GNU AWK 확장 예를 delete 또는 gensub 기능에 사용할 수없는 :

echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk --posix '{printf ("%.2f\n", $1 + 0) }' 
123,20 

그것은 POSIX 옵션을 지정하지 않고 소수점으로 ,으로 둔한 구문 분석 번호를 가질 수 있습니까?

답변

3

당신이 찾고있는 옵션은 다음과 같습니다

는 --use-LC-숫자

이 힘은 입력 데이터를 구문 분석 할 때, 로케일의 소수점 문자를 사용하는 둔한. POSIX 표준은이 동작을 필요로하지만 --posix가 유효 할 때 gawk가 작동하지만 기본값은 이며 소수점이 아닌 로케일 에서조차 점을 십진수로 사용합니다 ( ). 문자. 이 옵션은 --posix 옵션의 완전한 엄격함이없는 기본 동작을 재정의합니다.

데모 :

$ echo 123,2 | LC_NUMERIC=fr_FR.utf-8 awk --use-lc-numeric '{printf "%.2f\n",$1}' 
123,20 

참고 : 괄호가 필요하지 당신이 여기에 제로를 추가하는 이유를 잘 모르겠어요 않도록 printf 문은 함수가 아닙니다?

+0

"+ 0"은 문자열에서 숫자로 강제 변환하는 것이지만 여기서는 필요하지 않습니다. printf는 $ 1을 숫자로 형식화하기 위해 사용합니다. – user1081440

+1

그게 솔루션입니다, 많이 sudo_O 고마워! – user1081440