Мой сценарий выдает тот же результат при использовании $ RANDOM

Мне удалось исправить это, перейдя в Системные настройки -> Приложения -> Веб-браузер и установив параметр Открыть http и https URL-адреса на в следующем браузере - > firefox System settings screenshot

Это работает с KDE 5, но должно работать аналогично в предыдущих версиях.

8
21.08.2018, 03:55
3 ответа

Нет. Но $RANDOM возвращает большие числа (от 0 до 32767 ), что, особенно для слов ограниченной длины, показывает тот же результат, поскольку часть head, вероятно, возвращает все результаты grep (для 3, в моем/usr/share/dict/words)всего 819 совпадений.

Лучшим решением может быть перетасовка результатов:

egrep "^.{$num}$" /usr/share/dict/words | sort -R | tail -n 1

где -Rозначает--random-sort(расширение GNU sort).

20
27.01.2020, 20:08

Простой способ напечатать произвольное числовое-буквенное слово используетshuf:

egrep "^.{$num}$" /usr/share/dict | shuf -n1

Команда shufвыводит случайную перестановку входных данных, а флаг -n1указывает ей выводить только первый элемент из этого результата.

19
27.01.2020, 20:08

Как указывали другие, основная проблема с вашим кодом заключается в том, что $RANDOMчаще всего будет значением, намного большим, чем количество слов определенной длины.

Использование только awk:

$ awk -v len="$num" 'length == len { word[i++]=$0 }
                     END { print word[int(i*rand())] }' /usr/share/dict/words
Bosniac

Программа считывает все строки заданного файла определенной длины. Они хранятся в массиве words.

В конце случайный элемент из этого массива выбирается и печатается.

5
27.01.2020, 20:08

Теги

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