Límite de número de Bash?
Yo preguntéuna pregunta anteriormente, eso implicaba extraer primos grandes de un archivo de texto y colocarlos en otro archivo. Se suponía que debía capturar todos los prime hasta e incluyendo el primer prime después de 2 ^ 32, y por alguna razón este script dejó de funcionar.
#!/bin/bash
n=4294967296
last=0
while read number
do
if [ $last -gt $n ]
then break
fi
echo $number
last=$number
done < primes.txt > primes2.txt
Terminó repitiendo estos 11 números:
4232004449
4232004479
4232004493
4232004509
4232004527
4232004533
4232004559
4232004589
4232004593
4232004613
004437
El archivo original no tenía004437
en ella, y mi fiesta manejará números sobre8999999999999999999
¿Alguien tiene una pista de por qué sucedió esto?
Ubuntu 10.04 de 64 bits, 16 GB de RAM, 8 núcleos a 3,60 GHz
GNU bash, versión 4.1.5 (1) -release (x86_64-pc-linux-gnu)
Actualizar:
Después de descargar y compilar el bash "arreglado" proporcionado por jfgagne y enlazarlo en mi script de bash, se produjo un error en el mismo lugar exacto. Usando el equivalente perl significativamente más rápido de mi pregunta principal original, obtuve algunos tamaños de archivo de ls -al:
11 next_prime (just to make sure this was counting bytes accurately)
2147483659 primes2.txt
2147483670 one_too_many
2147483659 = 2 ^ 31 + 11
El tamaño de la próxima prima (4232004631
) es de 11 bytes Esto contiene todos los números primos hasta4232004613
. También me di cuenta de que la004437
viene desde el final del cebado al final de este bucle de error (4232004437
). Parece que algo está intentando avanzar, pero está atascado.