Использование оболочки для генерации случайных чисел, подобных этой, не совсем то, для чего она предназначена. Скорее всего, вам лучше кодировать что-то, чтобы генерировать случайные числа из равномерного распределения на другом языке, например, Fortran, Perl или C.
В вашем коде одна вещь, которая будет очень медленной, это генерация последовательности чисел из 1..1e7 и присвоение их всех переменной. Это, вероятно, очень расточительно, но вы должны сообщить, если вы хотите быть уверены. Как указывает хаос , добавление в файл также может быть очень дорогостоящим!
В Python вы можете сделать что-то вроде этого:
#!/usr/bin/python
import random
count = 1
print ' '.join( ['name', 'age'] )
while count <= 1000000:
age = random.randrange(15,90)
count = count + 1
name = 'name' + str(count)
print ' '.join( [ name, str(age) ] )
Запуск этого на моем ноутбуке занимает ~ 10 секунд. Присвоение seq от 1 до 1000000 занимает ~ 10 секунд, когда вы добавляете генерацию случайных чисел, ваш скрипт занимает более трех минут на той же машине. Я разочаровался так же, как и вы, и поиграл со сценарием, чтобы попытаться сделать его быстрее. Вот моя сокращенная версия вашего кода, с которым я играю:
for x in `seq 1 10000`; do
let "NUM=($RANDOM%75)+15"
echo $NUM >> test.txt
done
Запуск занимает около 5,3 с:
$ time ./test.sh
real 0m5.318s
user 0m1.305s
sys 0m0.675s
Удаление файла, добавляющего и просто перенаправляющего STDOUT в один файл, дает следующий скрипт:
for x in `seq 1 10000`; do
let "NUM=($RANDOM%75)+15"
echo $NUM
done
Выполнение этого занимает около полсекунды:
$ time ./test.sh > test.txt
real 0m0.516s
user 0m0.449s
sys 0m0.067s
Медлительность вашей программы, по крайней мере частично, связана с добавлением в этот файл. Любопытно, что когда я пытался поменять местами вызов seq с циклом for, я не заметил никакого ускорения.