Как выбрать случайный уникальный строки из текстового файла в оболочке?

У меня есть текстовый файл с неизвестным количеством строк. Мне нужно взять некоторые из этих строк наугад, но я не хочу, чтобы был риск повторения.

Я попробовал это:

jot -r 3 1 `wc -l<input.txt` | while read n; do
  awk -v n=$n 'NR==n' input.txt
done

Но это уродливо и не защищает от повторов.

Я также пробовал это:

awk -vmax=3 'rand() > 0.5 {print;count++} count>max {exit}' input.txt

Но очевидно, что это тоже неправильный подход, так как я не могу гарантировать даже получение maxстрок.

Я застрял. Как мне это сделать?

10
задан Graham 12 April 2012 в 06:47
поделиться