我之前问过一个问题,涉及从文本文件中提取大素数并将它们放入另一个文件中。它应该抓住每个素数,包括 2^32 之后的第一个素数,但由于某种原因,这个脚本停止工作。
#!/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
它最终遍历了这 11 个数字:
4232004449
4232004479
4232004493
4232004509
4232004527
4232004533
4232004559
4232004589
4232004593
4232004613
004437
原始文件中没有004437
,我的 bash 将处理数字8999999999999999999
有人知道为什么会这样吗?
64 位 Ubuntu 10.04、16GB RAM、8 核 @ 3.60 GHz
GNU bash,版本 4.1.5(1)-release (x86_64-pc-linux-gnu)
更新:
在下载并编译 jfgagne 提供的“固定”bash 并在我的 bash 脚本中链接到它之后,它在同一个确切的位置出错。使用我最初的主要问题中明显更快的 perl 等效项,我从 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
下一个素数 ( 4232004631
) 的大小是 11 字节 这将所有素数保存到4232004613
. 我还意识到004437
来自这个错误循环底部的素数末尾(4232004437
)。似乎有什么东西试图推进,但卡住了。