Можно использовать GNU seq
+ sort
, чтобы сначала сформировать список уникальных целых чисел 1B (в последовательном порядке), а затем sort -R
, чтобы перетасовать их случайным образом).
Хотя это неэффективно для процессора, это не зависит от памяти, поскольку sort будет использовать столько памяти, сколько доступно, а затем вернется к временным файлам.
Это займет несколько минут (в зависимости от CPU/Ram/disk вашей машины):
$ 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
Если у вас есть доступ к машине с достаточным количеством RAM, вы можете использовать GNU shuf
:
$ shuf -i 1-1000000000 > 1B.random.txt
Эмпирически, shuf
потребовалось ~8GB свободной памяти и ~6 минут времени работы на моей машине.