как в шелле получить случайную строчку из файла?

Модератор: Модераторы разделов

tull
Сообщения: 484

как в шелле получить случайную строчку из файла?

Сообщение tull »

есть результат вывода некой команды, там несколько десятков строк.
мне надо получить любую случайную строку (вариант взять первую или последнюю не подходит, ибо там идут ip в порядке возрастания, поэтому мне надо именно случайную строку)
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: как в шелле получить случайную строчку из файла?

Сообщение uptime »

fortune
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
tull
Сообщения: 484

Re: как в шелле получить случайную строчку из файла?

Сообщение tull »

uptime писал(а):
14.05.2009 13:54
fortune
не вижу такой комнады, в портах тоже нет. (система - freebsd 6.2)
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: как в шелле получить случайную строчку из файла?

Сообщение кодировщик »

tull писал(а):
14.05.2009 14:06
uptime писал(а):
14.05.2009 13:54
fortune
не вижу такой комнады, в портах тоже нет. (система - freebsd 6.2)

я так понял имеется в виду пакет fortune-mod, т.е. uptime намикает на его исходники.
Спасибо сказали:
Аватара пользователя
--=Civil696=--
Сообщения: 227
ОС: Gentoo o_O

Re: как в шелле получить случайную строчку из файла?

Сообщение --=Civil696=-- »

если из файла, то есть глупый способ :crazy:

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

navi ~ $ awk "BEGIN {N = 0; S=$RANDOM % $(cat file | wc -l)} { if (N == S) print $1; N++ }" file
Не 1
navi ~ $ awk "BEGIN {N = 0; S=$RANDOM % $(cat file | wc -l)} { if (N == S) print $1; N++ }" file
Ня 3
navi ~ $ awk "BEGIN {N = 0; S=$RANDOM % $(cat file | wc -l)} { if (N == S) print $1; N++ }" file
Ня 3
navi ~ $ awk "BEGIN {N = 0; S=$RANDOM % $(cat file | wc -l)} { if (N == S) print $1; N++ }" file
Ня 3
navi ~ $ awk "BEGIN {N = 0; S=$RANDOM % $(cat file | wc -l)} { if (N == S) print $1; N++ }" file
Ню 2
navi ~ $ awk "BEGIN {N = 0; S=$RANDOM % $(cat file | wc -l)} { if (N == S) print $1; N++ }" file
Не 1
navi ~ $ cat file
Не 1
Ню 2
Ня 3
НЕ ПАНИКУЙ © ^_~
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как в шелле получить случайную строчку из файла?

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

из http://wooledge.org:8000/BashFAQ/026:
$ shuf -n 1 <file>
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
tull
Сообщения: 484

Re: как в шелле получить случайную строчку из файла?

Сообщение tull »

Civil696,
пасибо, может кривоватый способ, но сгодится.
но есть проблемка, когда делаю из шела, все ок. вставляю в шеловский скрипт, получаю:

awk: syntax error at source line 1
context is
BEGIN { N = 0; S= >>> % <<< 9} { if (N == S) print ; N++ }

sash-kan писал(а):
14.05.2009 16:11
$ shuf -n 1 <file>
нету у меня такого, видимо надо отдельно собирать (не хотелось бы использовать приблуды, котоырх нет в системе, потом будешь систему переставлять, и забудешь поставить)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как в шелле получить случайную строчку из файла?

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

tull писал(а):
14.05.2009 16:22
приблуды
приблуды можете смело засовывать в то место, где вы их нашли.
$ dpkg -S $(which shuf)
coreutils: /usr/bin/shuf

p.s. заодно прочитайте, что там в конце страницы написано по приведённой мною ссылке.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
tull
Сообщения: 484

Re: как в шелле получить случайную строчку из файла?

Сообщение tull »

sash-kan писал(а):
14.05.2009 16:44
which shuf)
coreutils: /usr/bin/shuf
вы знаете, я вобщем-то не идиот... первым делом я посмотрел, есть ли он в системе.
пафтаряйу: НЕТУ
Спасибо сказали:
tull
Сообщения: 484

Re: как в шелле получить случайную строчку из файла?

Сообщение tull »

уф, сделал через gsort, спасибо за наВОДКУ :)
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: как в шелле получить случайную строчку из файла?

Сообщение uptime »

tull писал(а):
14.05.2009 14:06
uptime писал(а):
14.05.2009 13:54
fortune
не вижу такой комнады, в портах тоже нет. (система - freebsd 6.2)

Странно, что в портах нету.
http://opennet.ru/man.shtml?topic=fortune&russian=0
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как в шелле получить случайную строчку из файла?

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

tull писал(а):
14.05.2009 16:59
вы знаете, я вобщем-то не идиот
верю. верю даже, что отсутствие в вашей системе gnu/coreutils — проблема не ваша, а вашей системы.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
tull
Сообщения: 484

Re: как в шелле получить случайную строчку из файла?

Сообщение tull »

uptime писал(а):
14.05.2009 18:20
Странно, что в портах нету.
http://opennet.ru/man.shtml?topic=fortune&russian=0
make search name=fortune| grep Port
Port: zh-fortunetw-1.3
Port: wmfortune-0.241_2
Port: fortune-mod-bible-1.0_1
Port: fortune-mod-bofh-2.0_3
Port: fortune-mod-culmea-culmilor-2005.12.15
Port: fortune-mod-ferengi_rules_of_acquisition-2006.01.26
Port: fortune-mod-futurama-0.2_3
Port: fortuneit-1.99
Port: pl-fortunepl-0.0.20051022
Port: ru-fortune-bashorgru-20070808
Port: ru-fortuneru-0.8
Port: fortunelock-0.1.2
Port: pear-File_Fortune-1.0.0
Port: e17-splash-fortune-1.1_1

да фиг с ней. gsort решил все проблемы :rolleyes:
Спасибо сказали: