Как я могу сгенерировать указанное количество целых чисел в Linux?

#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))