Геннератор случайных чисел $RANDOM (Можно ли ...)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Геннератор случайных чисел $RANDOM

Сообщение farex »

Mожно ли через $RANDOM генерировать числа в "диапазоне", к примеру от 0 до 1300 ?
Есть файл со строками начинающимися от 0 до 1300.
Нужно в хаотичном порядке грепать по одному.
Собственно вот и решил что моно через $RANDOM генерировать.
Может есть еще какие варианты? (если через $RANDOM это не возможно.
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Геннератор случайных чисел $RANDOM

Сообщение serzh-z »

farex писал(а):
06.01.2010 13:24
Mожно ли через $RANDOM генерировать числа в "диапазоне", к примеру от 0 до 1300 ?
echo $((RANDOM%1300))
Спасибо сказали:
Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Re: Геннератор случайных чисел $RANDOM

Сообщение farex »

Спасибо...
Как то даже не подумал о такой конструкции.
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Re: Геннератор случайных чисел $RANDOM

Сообщение farex »

Еще момент:
Вот таки написал скрипт, но не пойму почему он дает "осечку"

Код: Выделить всё

#!/bin/bash
S=$(/bin/cat -n /home/Multimedia/Slovar/computer-eng/computer-eng.uvs | sed 's/^[ \t]*//' > /tmp/S)
R=$((RANDOM%3338))
RESULT=$(cat /tmp/S | grep $R | sed "s/^[ \t]*//")
echo $RESULT | sed "s/$R//"

Вот что происходит.

Код: Выделить всё

farex@dhcppc0 ~/bin$ ang_osd
 On mouse click при нажатии на мышку
farex@dhcppc0 ~/bin$ ang_osd
 2825 Stop остановить(ся), прекратить(ся); конечный; остановкаьтимедиа-устройствами
farex@dhcppc0 ~/bin$ ang_osd
 Exiting выход; выходящий; выходя
farex@dhcppc0 ~/bin$

Как такое может быть?
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Геннератор случайных чисел $RANDOM

Сообщение allez »

S=$(/bin/cat -n /home/Multimedia/Slovar/computer-eng/computer-eng.uvs | sed 's/^[ \t]*//' > /tmp/S)

Зачем такое архитектурное излишество - загонять командную конструкцию в переменную, которая потом все равно не используется?
Попробуйте убрать лишнее:

Код: Выделить всё

/bin/cat -n /home/Multimedia/Slovar/computer-eng/computer-eng.uvs | sed 's/^[ \t]*//' > /tmp/S


Еще один образчик эклектики:
RESULT=$(cat /tmp/S | grep $R | sed "s/^[ \t]*//")
echo $RESULT | sed "s/$R//"

Это также поддается упрощению:

Код: Выделить всё

cat /tmp/S | grep $R | sed "s/^[ \t]*//; s/$R//"
Спасибо сказали:
Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Re: Геннератор случайных чисел $RANDOM

Сообщение farex »

Да я пробывал..
Тогда

Код: Выделить всё

echo $S  | grep $R

Выводит весь список., от 0 до 3338
По этому и заюзал /tmp
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Геннератор случайных чисел $RANDOM

Сообщение allez »

Да и вообще весь ваш скрипт так и стремится свернуться в одну строчку. :)

Код: Выделить всё

R=$((RANDOM%3338)); /bin/cat -n /home/Multimedia/Slovar/computer-eng/computer-eng.uvs | sed 's/^[ \t]*//' | grep "$R" | sed "s/$R//"
Спасибо сказали:
Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Re: Геннератор случайных чисел $RANDOM

Сообщение farex »

Конечно спс...
Но таки не обрезает цифры.

Код: Выделить всё

farex@dhcppc0 ~$ R=$((RANDOM%3338)); /bin/cat -n /home/Multimedia/Slovar/computer-eng/computer-eng.uvs | sed 's/^[ \t]*//' | grep "$R" | sed "s/$R//"
        Directory service(s) служба каталогов
1       Mobile мобильный, передвижной, подвижный
2       Supported поддержал; поддержанный
farex@dhcppc0 ~$

Зы: Может словарик касячит.
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Re: Геннератор случайных чисел $RANDOM

Сообщение farex »

Есть другой словарик.
Но он выглядит так.

Слово на английском
Перевод


То есть в две строки., и так 3000 слов.
Нуно думать как объединить 1строку со второй, 3строку с четвертой итд.
-----------------------------
Попробывал со вторым словарем., результат такой же.
Видимо все дело именно в RANDOM
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Геннератор случайных чисел $RANDOM

Сообщение allez »

RANDOM ни при чем. Попробуйте так:

Код: Выделить всё

R=$((RANDOM%3338)); cat -n file | sed 's/^\s*//' | sed -n "/^$R\s/p" | sed 's/\s\{1,\}/ /g' | cut -d  ' ' -f 2-

Получилось быстренько и грязненько, но работает. Думаю, те, кто использует sed чаще меня, этот пример еще улучшат.
Спасибо сказали:
Аватара пользователя
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux

Re: Геннератор случайных чисел $RANDOM

Сообщение farex »

allez писал(а):
06.01.2010 17:55
Получилось быстренько и грязненько, но работает. Думаю, те, кто использует sed чаще меня, этот пример еще улучшат.

Действительно работает.
Спасибо allez за исследавания.
Зы: А способ хорош, я бы и не стал не чего улучшать.
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Геннератор случайных чисел $RANDOM

Сообщение t.t »

Всего лишь вывести строку по случайному номеру? Зачем же здесь sed?

Код: Выделить всё

head -$(( $RANDOM%$(wc -l <$file) )) $file | tail -1


allez писал(а):
06.01.2010 17:55
sed 's/\s\{1,\}/ /g'
Не сочтите за буквоедство, но это ведь tr -s ' ', если я правильно понял?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Геннератор случайных чисел $RANDOM

Сообщение sash-kan »

само изначальное описание задачи ну прямо таки напрашивается на fortune.
1. надо расставить % через каждые две строчки в исходном файле:
$ sed '2~2s/$/\n%/' исходный_файл > файл_с_фортунками
2. надо построить индекс к этому файлу (будет сгенерирован файл_с_фортунками.dat, небоходимый для работы fortune):
$ strfile файл_с_фортунками
3. запускаем:
$ fortune файл_с_фортунками
4. профит.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Геннератор случайных чисел $RANDOM

Сообщение drBatty »

farex писал(а):
06.01.2010 13:50
Спасибо...
Как то даже не подумал о такой конструкции.


--------------------
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"

???
farex писал(а):
06.01.2010 16:05
То есть в две строки., и так 3000 слов.
Нуно думать как объединить 1строку со второй, 3строку с четвертой итд.

Код: Выделить всё

sed 'N;s/\n/ /'

что может быть проще?
t.t писал(а):
12.01.2010 16:21
Всего лишь вывести строку по случайному номеру? Зачем же здесь sed?

+1
t.t писал(а):
12.01.2010 16:21
Не сочтите за буквоедство, но это ведь tr -s ' ', если я правильно понял?

ну... ага, вроде.
или sed -r 's/ +/ /'
sash-kan писал(а):
25.01.2010 13:40
само изначальное описание задачи ну прямо таки напрашивается на fortune.

можно и так...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Геннератор случайных чисел $RANDOM

Сообщение sash-kan »

sash-kan писал(а):
25.01.2010 13:40
само изначальное описание задачи ну прямо таки напрашивается на fortune.
1. надо расставить % через каждые две строчки в исходном файле:
$ sed '2~2s/$/\n%/' исходный_файл > файл_с_фортунками
2. надо построить индекс к этому файлу (будет сгенерирован файл_с_фортунками.dat, небоходимый для работы fortune):
$ strfile файл_с_фортунками
3. запускаем:
$ fortune файл_с_фортунками
4. профит.

кстати, для облегчения процедуры нарисовал мэйкфайл.
ориентируется он на то, что исходные файлы имеют суффикс «.txt».
после прохода make на этот каталог можно натравливать fortune.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: