Я хочу создать сценарий, который создаст случайные числа от 0 до 30 000 и сохранит их в текстовом файле.
Я хочу, чтобы все числа были в одной строке. Я также хочу, чтобы числа были до 1 - 1 000 000 (я подразумеваю, что должны быть 1 - 1 000 000 чисел в файле).
Как я делаю это? Я хочу, чтобы тот сценарий протестировал программу, которую я сделал, и я хочу, чтобы сценарий автоматически создал числа, таким образом, я не должен занимать время, чтобы записать им самостоятельно.
Я также ничего не знаю о Linux, пишущем сценарий поэтому, если бы можно добавить некоторые комментарии в коде, я был бы с удовольствием принят!:)
Используйте shuf
команда:
shuf -e {1..N} | tr '\n' ' ' > some-file
, Например:
$ shuf -e {1..10} | tr '\n' ' '
4 9 1 7 8 6 3 5 10 2
Для очень больших количеств Вы могли бы хотеть использовать for
цикл и затем переставить его:
for i in {1..1000000}
do
echo $i
done |
shuf | tr '\n' ' ' > some-file
#!/usr/bin/env python
# The line above should always be on the top of
# an executable python file. It describes the
# program this file should be interpreted with
# Import let's you extend the core functunality
# of python with code in extra "modules"
import random
# result is a string variable. Python is not strict
# about variable declaration or typing. They can
# be declared like this at any point in the programm
# and may hold a variaty of data types. This one holds
# text now.
result = ""
# The imported module random offers the function randint.
# This function generates a number, where: 1 <= n <= 1000000
loop_iterations = random.randint(1,1000000)
# counter starts of at zero, counts up and,
# on the last round, reaches loop_iterations -1
for counter in range(loop_iterations):
new_random_integer = random.randint(0,30000)
result += ", "
# We can't add a number to a string, so we need
# to convert it into a text representation first.
result += str(new_random_integer)
# A file handler let's you interact with an opened file.
# open takes a path and a setting wether you want to
# read/write. w means write.
file_handler = open('/tmp/output.txt', 'w')
file_handler.write(result)
file_handler.close()
Очень частая техника для генерации случайных чисел в определенном диапазоне к является взятием случайное целое число, и вычислите остаток от целочисленного деления между целым числом и различием пределов диапазона. Основная идея состоит в том, что остаток может только быть от 0 до делителя, таким образом, мы получаем это и затем смещаем получающееся значение низким пределом. Я использовал эту технику многократно когда написание кода в C.
, Конечно, этот вопрос отмечен с scripts
, и хорошо возможно реализовать ту же технику в bash
. Мы можем использовать $RANDOM
переменный генератор и затем взять целое число в желаемый диапазон с помощью bc
калькулятор. Сценарий ниже делает точно что:
#!/usr/bin/env bash
get_random_int(){
echo "$low + $RANDOM % ( $high - $low + 1 )" | bc
}
main(){
local howmany=$1
local low=$2
local high=$3
local counter=0
while [ $counter -lt $howmany ]
do
get_random_int
counter=$(($counter+1))
done
}
main "$@"
Основное использование:
$ ./random_in_range.sh 3 100 200
184
110
179
первый аргумент - то, сколько целых чисел Вы хотите, второй низкий предел, и третьим аргументом является верхний предел.