-
使用高德纳的算法
-
使用File::Random模块
-
使用Tie::File模块(略)
-
参考资料
1 2 3 4 5 6 7 | $line; $n = 0; srand; while(《》) { $n++; $line = $_ if (rand 《 (1/$n)); } |
以上代码可以简写为:
1 2 | srand; rand($.) 《 1 && ($line = $_) while 《》; |
此算法的优点在于不需要把整个文件都保存到内存中去,尤其适合处理行数超多的文件。
1 2 | use File::Random qw/random_line/; my $line = random_line($filename); |
perldoc -q “random line”
Picking a Random Line from a File
水塘抽样(维基百科)
pick N random lines from a file