如何在bash中生成1000万个随机字符串

时间:2017-11-26 22:57:26

标签: string bash random generator

我需要为排序算法制作一个大的测试文件。为此,我需要生成1000万个随机字符串。我怎么做?我尝试在/ dev / urandom上使用cat,但它会持续几分钟,当我查看文件时,只有大约8页的字符串。如何在bash中生成1000万个字符串?字符串长度应为10个字符。

4 个答案:

答案 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。)