Страница 1 из 1

как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-03 18:54:37
tull
есть список, надо получить из него несколько случайных строк.
раньше использовал gsort -R | head -n
переехал на новый сервер (была freebsd 7.2, стала 8.1), и gsort почему-то нет, в т.ч. в портах.
мне подойдет любое решение, которое позволяет выдергивать заданное кол-во случайных строк.

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-03 19:17:28
FiL
в bash'e есть $RANDOM.

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

N=`cat $FILE |wc -l`
num=5
for ((i=1; i<=$num; i++))
do
 R=$(($RANDOM % $N))
 echo $R
 head -n $R $FILE |tail -1
done

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-04 10:07:11
kpp
Во Фре есть замечательная утилита jot. Кроме всего прочего, умеет генерировать случайные(конечно псевдослучайные) числа в заданном диапазоне.
Пример получения двух случайных номеров строк из файла:

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

#!/bin/sh
#
# 2011-02-17 17:34:18
# Description
# version 1
#

# получить кол-во строк в файле
STR_NUM=`wc -l $1 | awk '{print $1}'`
# получить первый случайный номер строки
NUM1=$(jot -r 1 1 $STR_NUM)
# получить второй случайный номер строки
NUM2=$(jot -r 1 1 $STR_NUM)
# для гарантирования того, что получили разные номера
while [ "$NUM1" -eq "$NUM2" ]
do
 NUM2=$(jot -r 1 1 $STR_NUM)
done

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-04 18:35:11
tull
Спасибо за советы!
А чего вообще с этим gsort произошло, почему он исчез?

Вообще на самом деле моя задача - удалять несколько случайных записей из таблицы pf. Раньше делалось так:
/sbin/pfctl -t table -Ts | /usr/local/bin/gsort -R | head -n 5 | /sbin/pfctl -t table -T del -f -
В принципе меня устроит и вариант удаления не случайных, а просто несколько ip, которые были добавлены раньше всего.

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-05 9:40:19
kpp
А что такого особенного есть в gsort, чего нет в обычном sort ?
Может обычного, стандартного sort хватит?

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-05 14:28:39
tull
kpp писал(а):А что такого особенного есть в gsort, чего нет в обычном sort ?
Может обычного, стандартного sort хватит?
sort не умеет сортировать в случайном порядке, а gsort умеет (ключ -R)

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-05 17:34:59
kpp
Гм.. Но это уже не сортировка, а "перепутывание". ;)
Можно стандартному sort задавать разные параметры сортировки :-D

Re: как выбрать несколько случайных строк из списка?

Добавлено: 2011-10-05 22:06:27
tull
kpp писал(а):Гм.. Но это уже не сортировка, а "перепутывание". ;)
Ну, типа того.
В конечном итоге все, что мне нужно - случайным образом удалять записи из таблицы pf.