Это похоже на метод Стефана Шазеласа, однако я считываю сразу 64 бита, чтобы повысить производительность. Распределение по-прежнему равномерное, но теперь вы получаете 19 цифр на каждые 8 байтов вместо 8 в лучшем случае, как раньше
perl -nle 'BEGIN{$/=\8; $,=" "}
$n = unpack("Q");
next if $n >= 10000000000000000000;
$s = sprintf("%019u", $n);
push @a, (split //, $s);
if (@a >= 100) {print (splice @a, 0, 100);}' < /dev/urandom | head -c1G
На 32-битной платформе каждый раз будет считываться 9 цифр вместо 19.
{{1 }}