Как достичь «непрерывности случайности»?

С RANDOM%x получается набор дискретных результатов.

Как я могу достичь следующего сценария ?: Внутри цикла for я хотел бы позволить скрипту bash выполнить команду A в 33,33% всех циклов, а также выполнить команду B (66,66%).

3 Solutions collect form web for “Как достичь «непрерывности случайности»?”

Вы используете RANDOM % x , как и вы сказали.

 if [[ $((RANDOM % 3)) == 0 ]] then A else B fi 

⅓ времени, когда значение по модулю 3 будет равно 0, а затем выполняется команда A. В остальное время выполняется команда B.

Например, чтобы получить десятичное случайное число из генератора псевдослучайных чисел (prng), вы можете использовать

 dd bs=1 count=1 if=/dev/urandom 2>/dev/null|od -i|awk '{print $2}' 

Как предложил Майкл, вы можете использовать modulo 3 на этом номере, или вы можете просто использовать

 let b=`dd bs=1 count=1 if=/dev/urandom 2>/dev/null|od -i|awk '{print $2}'` if [ $b -ge 85 ] then B else A fi 

При этом у вас есть 33.33% <85 и 66.66%> = 85, поэтому вы входите на 85.

Так как я использовал dc ( калькулятор с обратной записью для польского языка ), в любом случае вы можете, конечно, просто использовать modulo

 let b=`dd bs=1 count=1 if=/dev/urandom 2>/dev/null|od -t u1|awk '{print $2" 3%pq"}'|dc` if [ $b -eq 0 ] then A else B fi 

Вы не должны использовать случайное число, чтобы получить желаемые 33% против 66% результатов.

Просто увеличьте счетчик и используйте modulo 3, как упоминалось некоторыми другими:

 #!/bin/bash count=0 ca=0 cb=0 while ((count++)); ((count <100)); do if [[ $(($count % 3)) == 0 ]] then ((ca++)) else ((cb++)) fi done printf "count of ca: %d\ncount of cb: %d" ${ca} ${cb} 

Это приводит к:

 count of ca: 33 count of cb: 66 

Когда используется рандомизатор, результаты являются неожиданными (не 33% против 66%):

 #with a changed if statement: #if [[ $(($RANDOM % 3)) == 0 ]] #the results of three runs are: count of ca: 31 count of cb: 68 count of ca: 27 count of cb: 72 count of ca: 44 count of cb: 55 
  • Скрипты не могут запускаться одновременно при запуске
  • SSH на нескольких серверах и сохранение вывода нескольких команд в файле на локальном сервере
  • Замена переменной, содержащей \ with sed
  • Как найти PID конкретной программы?
  • Как проверить скрипт оболочки, если исполняемый файл запущен или нет?
  • Вложенный «awk» в цикле «while», проанализируйте два файла по строкам и сравните значения столбцов
  • Копирование и переименование файлов в один каталог с помощью одного сценария оболочки
  • В чем разница между результатами и эффективностью после добавления -f в rm и -print в поиске?
  • Удалить скрипт оболочки Linux
  • Почему моя петля над выходом ls не работает?
  • Добавить в файлы
  • Interesting Posts

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

    numlock при запуске на linux mint 18.2

    Установка постфикса из репозитория centosplus «Не удалось разрешить хост: mirror.linode.com; Неизвестная ошибка"

    Обеспечивает ли SELinux достаточную дополнительную безопасность, чтобы быть в курсе обучения / настройки?

    Как использовать инструменты GNU для извлечения и объединения двух подстрок одной и той же строки?

    Как заставить bash считать слово `-mthreads` как` -pthread`?

    альтернативная альтернатива

    Есть ли инструмент, который позволяет мне совместно использовать интернет-соединение через Wi-Fi?

    Невозможно расширить размер раздела:

    Отключение блокировки затвора с помощью setxkbmap делает ключ Shift в Emacs

    Что такое чистый шрифт sans, поддерживающий UTF-8, который подходит для использования в консоли?

    Как повернуть набор изображений из командной строки?

    Linux Mint 17: Редакторы меню не могут «перемещать» приложения «Главное меню»

    Почему tar не хватает места на диске, когда его осталось?

    Сколько места для / дома на кластере hadoop?

    Linux и Unix - лучшая ОС в мире.