从文件中随机获取许多行而不对其进行混洗

时间:2011-11-21 18:02:05

标签: file unix random

我需要使用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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您可以尝试:

n=$((`wc -l "${file}" | cut -d' ' -f1` / 11))
m=$(($RANDOM % $n))
tail -n +$(($m * 11)) "${file}" | head -n 11