gawk가 정수 계산을 수행하는 동안 쉼표를 구분 기호로 사용하여 부동 소수점의 합계를 계산하려고 합니다. 스크립트는 다음과 같습니다.
BEGIN {
FS=";"
OFS=";"
CONVFMT = "%2.2f"
}
{
print $1
print $2
print $1+$2
}
나는 이 데이터 파일을 사용하고 있습니다:
4,3;5,7
다음과 같이 스크립트를 호출하십시오.
LC_ALL=fr_BE gawk -f test.awk < t.txt
나는 다음과 같은 결과를 얻습니다.
4,3
5,7
9
fr_BE 로케일을 설정했지만 결과가 여전히 올바르지 않습니다. 이 문제를 어떻게 해결할 수 있나요?
답변1
대답은 --use-lc-numeric
gawk 옵션을 사용하는 것입니다.
--use -lc-번호
이는 gawk가 입력 데이터를 구문 분석할 때 로케일의 10진수 문자를 사용하도록 강제합니다. POSIX 표준에서는 이 동작을 요구하고 gawk는 --posix가 적용될 때 그렇게 하지만 기본값은 마침표가 소수점이 아닌 로케일에서도 레거시 동작을 따르고 마침표를 소수점으로 사용하는 것입니다. 성격. 이 옵션은 --posix 옵션의 전체 엄격함 없이 기본 동작을 재정의합니다.
예
다음 데이터 파일이 있다고 가정해 보겠습니다.
$ cat t.txt
4,3;5,7
4,9;5,7
출력을 더 쉽게 볼 수 있도록 다음 줄을 변경했습니다 test.awk
.
print "Total: "$1+$2
이제 위 스위치를 사용하여 실행하면 다음과 같습니다.
$ LC_ALL=fr_BE gawk --use-lc-numeric -f test.awk < t.txt
4,3
5,7
Total: 10
4,9
5,7
Total: 10,60
인용하다
답변2
문제는 gawk
문자열을 4,3
float로 변환할 수 없다는 것입니다. ,
로 교체하여 해결할 수 있습니다 .
. @glenn jackman의 경우 다음을 입력합니다.
BEGIN {
FS=";"
OFS=";"
CONVFMT = "%2.2f"
}
{
gsub(",",".",$0)
print $1
print $2
print $1+$2
}
$ LC_ALL=fr_BE gawk -f test.awk < file
4.3
5.7
10
4.9
5.7
10.6