我需要为排序算法制作一个大的测试文件。为此,我需要生成1000万个随机字符串。我怎么做?我尝试在/ dev / urandom上使用cat,但它会持续几分钟,当我查看文件时,只有大约8页的字符串。如何在bash中生成1000万个字符串?字符串长度应为10个字符。
答案 0 :(得分:3)
更新,如果你有来自 GNU coreutils 的begin
,你可以使用:
shuf
在我的电脑上花2秒钟。 (谢谢R6RS section 11.4.7!)
您可以使用shuf -i 1-10000000 > file
生成序列号并使用awk
随机播放:
shuf
我的电脑需要约5秒钟
答案 1 :(得分:1)
这不保证单一性,但在文件中为您提供1000万条随机行。不是太快,但在我的机器上运行不到30秒:
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 10000000 > file
答案 2 :(得分:1)
如果他们不需要是uniq,你可以这样做:
$ awk -v n=10000000 'BEGIN{for (i=1; i<=n; i++) printf "%010d\n", int(rand()*n)}' >big_file
我的iMac大约需要3秒钟。
答案 3 :(得分:1)
不要生成它,下载它。例如 Nic funet fi 在其100Mrnd
(下面只是 funet )中有文件/dev
(大小为104857600)。 10M行,每行10个字节为100M但使用xxd
从bin转换为十六进制(\x12
- &gt; 12
)我们只需要50M字节,因此:
$ wget -S -O - ftp://funet/100Mrnd | head -c 50000000 | xxd -p | fold -w 10 > /dev/null
$ head -5 file
f961b3ef0e
dc0b5e3b80
513e7c37e1
36d2e4c7b0
0514e626e5
(将 funet 替换为给定的域名和路径,并使用所需的文件名替换/dev/null
。)