Как я могу получить некоторые случайные числа в определенном диапазоне?

Я хочу создать сценарий, который создаст случайные числа от 0 до 30 000 и сохранит их в текстовом файле.

Я хочу, чтобы все числа были в одной строке. Я также хочу, чтобы числа были до 1 - 1 000 000 (я подразумеваю, что должны быть 1 - 1 000 000 чисел в файле).

Как я делаю это? Я хочу, чтобы тот сценарий протестировал программу, которую я сделал, и я хочу, чтобы сценарий автоматически создал числа, таким образом, я не должен занимать время, чтобы записать им самостоятельно.

Я также ничего не знаю о Linux, пишущем сценарий поэтому, если бы можно добавить некоторые комментарии в коде, я был бы с удовольствием принят!:)

0
задан 30 December 2016 в 18:27

3 ответа

Используйте 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
2
ответ дан 6 October 2019 в 11:54
#!/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()
2
ответ дан 6 October 2019 в 11:54

Очень частая техника для генерации случайных чисел в определенном диапазоне к является взятием случайное целое число, и вычислите остаток от целочисленного деления между целым числом и различием пределов диапазона. Основная идея состоит в том, что остаток может только быть от 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

первый аргумент - то, сколько целых чисел Вы хотите, второй низкий предел, и третьим аргументом является верхний предел.

1
ответ дан 6 October 2019 в 11:54

Другие вопросы по тегам:

Похожие вопросы: