2014-10-17 3 views
0

awkc을 사용하여 awk 스크립트에서 실행 파일을 생성합니다. 내가 다른 시스템에서 실행 한 실행 파일 (abc.exe)를 생성 한awk 스크립트에서 lang env를 "en_US.UTF-8"로 설정하는 방법은 무엇입니까?

BEGIN{printf "Value=%s\n",(3.13+3.26)} 

: 나는 awk 스크립트의 abc.awk에 다음 줄이있다. 부동 소수점 연산에서 다른 출력을 제공합니다.

하나의 로컬 시스템에서는 출력이 6.39이지만 다른 시스템에 다른 시간대에있는 출력은 6입니다.

다양한 사이트를 검색했을 때 LANG 환경 변수를 설정할 수 있지만 어떻게 표시 할 수 있습니까?

+0

이 부분은 awk 스크립트의 일부입니까? 그게'printf'일까요? 최소한의 예'awk 'BEGIN {printf "Value = % s \ n", (3.13 + 3.26)}' '으로 문제를 재현 할 수 있습니까? –

+0

나는 당신의 제안에 관해 간단히 설명했다. 추가하려면 다음 명령을 사용하여 EXE를 생성했습니다. awkc -o -f Vamshi

+0

이 질문을보실 수 있습니다 : http://stackoverflow.com/questions/18946689/why-does-awk-refuse-to -sum-up-floats –

답변

0

다른 시스템의 로캘 설정과 관련이 없지만 부동 소수점 숫자를 찾으려면 "%f" 형식 지정자를 사용해야합니다. 2 소수점에 대한 답을 얻으려면, "%.2f"를 사용

BEGIN{printf "Value=%.2f\n",(3.13+3.26)} 

이에 관계없이 시스템의가에 실행되는 동일한 결과를 제공해야합니다.

편집

: 링크 된 질문에 따라, 아마 당신은 LC_NUMERIC=C가 명시 적으로 로케일을 설정하는 데 사용하려고한다 :

LC_NUMERIC=C awk 'BEGIN{printf "Value=%.2f\n",(3.13+3.26)}' 

관계없이가 실행중인 시스템의 작동합니다.

+0

나는 "%.2f "이지만 결과는"Value = 6,00 "입니다. 결과 대신 쉼표가 사용되는 것이 궁금합니다. 로케일과의 종속 관계가있는 것 같습니까? – Vamshi

+0

그래서'3,13+ 3,26' 그 시스템에서 작동하는 것 같아요? –

+0

잘못된 형식으로 인해 exe가 생성되지 않아 작동하지 않습니다.하지만 모든 시스템에 일반적인 해결책이 필요합니다. 실제로 내 요구 사항은 실제로 일부 변수에 저장됩니다. 그래서 디버깅 난 플로트와 문제를 발견했다. 그래서 로케일 LC_ALL 또는 LC_NUMERIC 숫자 식을 처리하는 일부 값을 설정하려면 찾았지만 다른 사이트에서. 그러나 스크립트에서 사용하는 방법을 설명하지 않았다. – Vamshi

0

환경 변수는 일반적으로 다른 사람에게 프로그램을 넘겨 주면 제어하지 않는 것입니다. 나는 귀하의 printf-call에서보다 구체적으로 조사 할 것입니다. 숫자를 문자열로 포맷하여 놀라운 세부 사항을 표현할 수 있습니다. 당신은 아마 당신은 지금)를 string (%s를 사용합니다 (float (%f)을 찾고 있습니다.

당신이, 당신은 수 대를 제어 할 수 있습니다 당신이 당신의 printf -calls 항상 같은 트릭을 만드는 것을 통지하는 경우 . BEGIN 블록에서 변수 CONVFMT와 문자열 변환 설정 나는 분명히 그것은 POSIX 표준에 그러나이며, 하나 gawk 통해 소개되었다 여부 awkc이 지원, 나도 몰라

gawk manual에서.. :

이 문자열은 숫자를 문자열로 변환하는 것을 제어합니다 ( 변환 참조). 사실상 sprintf() 함수에 첫 번째 인수로 전달되어 작동합니다 (문자열 함수 참조). 기본값 의 값은 "% .6g"입니다. CONVFMT는 POSIX 표준에 의해 도입되었습니다.