получить много строк случайным образом сформировать файл, не перетасовывая их - PullRequest
2 голосов
/ 21 ноября 2011

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

Случайный исходный файл:

1
2
3
4
5
6
7
8
9
10
11
############
12
13
14
15
16
17
18
19
20
21
22

Запуск ./myscript должен дать мне:

1
2
3
4
5
6
7
8
9
10
11

или

12
13
14
15
16
17
18
19
20
21
22

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011
tail -n +$(($RANDOM % 
     ($(wc -l "$filename" | cut -d' ' -f1) - 11))) "$filename" |
     head -n 11

Проверено

С

export filename=/etc/dictionaries-common/words
set -o xtrace

в первый раз

~$ tail -n +$(($RANDOM % ($(wc -l "$filename" | cut -d' ' -f1) - 11))) "$filename" | head -n 11
+ head -n 11
++ wc -l /etc/dictionaries-common/words
++ cut '-d ' -f1
+ tail -n +11614 /etc/dictionaries-common/words
Moriarty's
Morin
Morin's
Morison
Morison's
Morita
Morita's
Morley
Morley's
Mormon
Mormon's

во второй раз

~$ tail -n +$(($RANDOM % ($(wc -l "$filename" | cut -d' ' -f1) - 11))) "$filename" | head -n 11
+ head -n 11
++ wc -l /etc/dictionaries-common/words
++ cut '-d ' -f1
+ tail -n +1661 /etc/dictionaries-common/words
Beatrice
Beatrice's
Beatrix
Beatrix's
Beatriz
Beatriz's
Beau
Beau's
Beaufort
Beaufort's
Beaujolais
0 голосов
/ 21 ноября 2011

Вы можете попробовать:

n=$((`wc -l "${file}" | cut -d' ' -f1` / 11))
m=$(($RANDOM % $n))
tail -n +$(($m * 11)) "${file}" | head -n 11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...