12/07/22 11:41:46.83 .net
>>693
691、ちょっと訂正。無駄にキュー使う分、元スクリプトから劣化してた。
> p+=RSTART-1;
>- enQ(substr(A[i],p,RLENGTH));
>+ if(hitTop+1<i){
>+ A[++hitTop]=substr(A[i],p,RLENGTH)
>+ }else{
>+ enQ(substr(A[i],p,RLENGTH));
>+ }
> p+=RLENGTH;
あと、良く考えたら出力先を別にするなら、そもそもキュー不要。
バグってのは687で数値上限云々と書いたとおり、
”C[0]+=1”がawkの整数の精度誤差なし演算可能上限を考慮していないだけ。
どのawkも多分そうだと思うけど、手元の環境下での実行結果↓
C:\>gawk --version
GNU Awk 3.1.7(windows special Nov 24 2009)
C:\>gawk "BEGIN{print 9007199254740990+1}" nul
9007199254740991
C:\>gawk "BEGIN{print 9007199254740991+1}" nul
9007199254740992
C:\>gawk "BEGIN{print 9007199254740992+1}" nul
9007199254740992
実際は(hddやメモリが先に死ぬので)
一行でこれだけ正規表現がhitする事は事実上無いし、
仮に発生しても検索結果が潰れるだけで、気付かない筈。