anu*_*rag 3 awk regular-expression
我需要生成近 10 亿条唯一整数记录。我尝试过 awk,但它没有生成超过 500 万条记录。以下是我迄今为止尝试过的-
awk -v loop=10000000000 -v range=10000000000 'BEGIN{
srand()
do {
numb = 1 + int(rand() * range)
if (!(numb in prev)) {
print numb
prev[numb] = 1
count++
}
} while (count<loop)
}'
Run Code Online (Sandbox Code Playgroud)
但它没有生成超过 599160237 条记录并且进程被自动杀死
小智 5
您可以使用 GNU seq+sort首先生成一个唯一的 1B 整数列表(按顺序),然后sort -R随机打乱它们)。虽然这不是 CPU 高效的,但它与内存无关,因为 sort 将使用尽可能多的可用内存,然后恢复到临时文件。
这将需要几分钟(取决于您机器的 CPU/Ram/磁盘):
$ seq 1000000000 > 1B.txt
$ ls -lhog 1B.txt
-rw-rw-r-- 1 9.3G Dec 26 17:31 1B.txt
$ sort -R 1B.txt > 1B.random.txt
Run Code Online (Sandbox Code Playgroud)
如果您可以访问具有足够 RAM 的机器,则可以使用 GNU shuf:
$ shuf -i 1-1000000000 > 1B.random.txt
Run Code Online (Sandbox Code Playgroud)
根据经验,shuf我的机器需要~8GB 的空闲内存和~6 分钟的运行时间。