Unix에서 25개 이상의 연속 숫자로 base62 작업을 수행하려고 시도했지만 awk가 기본값을 처리합니다.

Unix에서 25개 이상의 연속 숫자로 base62 작업을 수행하려고 시도했지만 awk가 기본값을 처리합니다.

아래는 내 코드입니다.

#!/usr/bin/ksh
awk 'BEGIN {FS="|"; flag=0;}
{
x=$2
rem=int(x)%62
quo=int(x/62)
flag=0
while(quo>62)
{
sub_rem=int(quo)%62
quo=int(quo/62)
if(flag==0)
{
grp_rem=sub_rem
}
else
{
grp_rem=sub_rem","grp_rem
}
flag++
}
printf "%d|%d|%s,%s,%s\n",$1,$2,quo,grp_rem,rem >> "text.out"
}
end{}
' test.txt

위 코드의 문제점은 다음과 같습니다.

1) 18개 이상의 입력을 전달하려고 할 때 기본값을 사용합니다.

Sample data: 
1|123456789123456789123456789
2|24536789215457896314563

2) 일부 라인에서 base62 작업을 수행한 후 다른 라인의 출력이 다릅니다.

sample data: 
row1:  1|276
row2:  1|276
row3:  1|277
row4:  1|278
.
.
.
.
row 300: 300|276


samplet out: 
row1:  1|276|4,0,28
row1:  1|276|4,0,28
row1:  1|277|4,0,27
row1:  1|278|4,0,28
...
row 300: 300|276|4,1,28

위의 문제를 해결할 수 있는 방법이 있나요?

답변1

정수 정밀도를 달성하고 있습니다 awk.

입력 파일이 주어지면:

$ cat file
1|123456789123456789123456789
2|24536789215457896314563

간단한 방법으로는 print올바른 결과가 표시되지 않습니다.

$ awk -F\| '{print $2+0}' file
123456789123456791337762816
24536789215457895776256

앞으로 나아갈 방법은 옵션을 사용하는 것 --bignum입니다 -M.

$ awk --bignum -F\| '{print $2+0}' file
123456789123456789123456789
24536789215457896314563

이 옵션은 --bignumGNU awk 버전 4.1.0부터 사용할 수 있습니다.

관련 정보