#bash
Вопрос:
Я нашел много вопросов/ответов, связанных с этой проблемой, но я не смог выбрать, что именно мне нужно.
Как я могу сгенерировать указанное количество целых чисел?
#!/bin/sh
count=$1
# TODO: print $count integers to the console
который выводит случайные целые числа по одному в строке.
$ generate.sh 32768
1
32
-47
9
-2
31
...
$
Чтобы я мог передать вывод в файл.
sh ./generate.sh 32768 > random_intengers.txt
В настоящее время я этим занимаюсь.
#!/bin/sh
count=$1
for i in $(seq $count); do
echo $SRANDOM
done
Достаточно ли это хорошо? Любой другой более эффективный способ использования od
или какой-то другой?
Целочисленный диапазон не является проблемой до тех пор, пока он не превышает 32 бита, знак будет лучше
Комментарии:
1. Поскольку это вопрос bash, вы можете использовать встроенный
for ((i=0; i<count; i )); do
вместо вызова внешнегоseq
. Обратите внимание, что » Достаточно ли это хорошо? «основано ли мнение на мнениях, и вопросы, основанные на мнениях, не поощряются на SO. Более того, это сильно зависит от того, какое качество случайности вам нужно, что-то, что вы не объясняете.2. Можете ли вы использовать python ?
3. @balderman Да, я могу, приятель!
4. Что должен делать скрипт — генерировать N случайных чисел в диапазоне?
5. @balderman Любой диапазон хорош, если он не превышает 32-разрядный.
Ответ №1:
Я бы использовал hexdump
и /dev/urandom
если они доступны:
$ count=5
$ hexdump -n $((4*count)) -e '/4 "%dn"' /dev/urandom > random_integers.txt
$ cat random_integers.txt
535142754
455371601
-323071241
-1154116530
1841746137
Объяснение:
-n $((4*count))
считывает4*count
байты из/dev/urandom
.-e '/4 "%dn"'
задает строку формата, которая использует 4 байта за раз (/4
) и выводит их в виде целого числа, за которым следует новая строка ("%dn"
).
Комментарии:
1. Спасибо. github.com/onacit/gist-java/blob/develop/src/test/resources/…
Ответ №2:
Если у вас есть jot
доступная команда, вы могли бы сделать это:
$ jot -r 10 0 1000
89
664
188
588
785
426
723
221
833
265
Выводит 10
случайные ( -r
) числа между 0
и 1000
. И он также может генерировать десятичные числа:
$ jot -r 10 0 1000.0
189.9
15.6
989.6
139.9
777.0
18.1
285.3
574.8
201.0
312.1
Или подписал:
$ jot -r 10 -1000 1000.0
-551.5
-65.0
634.3
-814.6
881.2
-713.7
422.1
390.3
674.2
-750.9
Ответ №3:
решение на основе python ниже
import sys
from random import randrange
count = int(sys.argv[1]) if len(sys.argv) > 1 else 1000
for x in range(0,count):
print(randrange(100000))