Следующий код делает список имен и номеров «» и дает каждому человеку случайный возраст между 15 и 90.Как ускорить это?
#!/bin/sh
file=$1
n=$2
# if number is zero exit
if [ "$n" -eq "0" ]
then
exit 0
fi
echo "Generating list of $n people."
for i in `seq 1 $n`;
do
let "NUM=($RANDOM%75)+15"
echo "name$i $NUM (###)###-####" >> $file
done
echo "List generated."
С этим я пытаюсь составить список имен 1M. Это медленно, я ожидал этого; это было так медленно, что я потерял терпение и попробовал имена 10K. Это было слишком медленно, но это произошло через несколько секунд.
Причина, по которой я генерирую имена, заключается в их сортировке. Меня удивило то, что когда я отсортировал список имен 10K, это было мгновенно.
Как это может быть?
Есть ли что-то, что заставляет это идти нечестиво медленно? И сортировка, и генерация - это доступ к файлам, так как сортировка может быть быстрее? Является ли мой случайный номер математики в генераторе списка, что замедляет его?
Вот мой сценарий сортировки.
#!/bin/sh
#first argument is list to be sorted, second is output file
tr -s '' < $1 | sort -n -k2 > $2
Возможно, попробуйте использовать лучший инструмент для этой работы? – Juliet
Могу я предложить скрипт Perl, который сделает это за долю времени? – cletus
Проще говоря, вы выполняете новый процесс (эхо) 10k раз. И выходной файл открывается 10k раз. Это замедляется на больших количествах. Также bash '' for 'не подходит для обработки больших списков. Какое другое замедление, создание такого большого списка, как переменная bash, является медленным. Принимая во внимание, что команда sort? Он запускается только один раз. И сортировка идет быстро. – nos