【发布时间】:2010-10-25 18:48:47
【问题描述】:
跟进this 问题,我需要从文件(或stdin)中随机准确地获取n 行。这类似于head 或tail,除了我想要一些来自中间的。
现在,除了使用链接问题的解决方案循环文件之外,一次运行准确获得 n 行的最佳方法是什么?
作为参考,我试过这个:
#!/usr/bin/perl -w
use strict;
my $ratio = shift;
print $ratio, "\n";
while () {
print if ((int rand $ratio) == 1);
}
$ratio 是我想要的粗略百分比。例如,如果我想要 10 行中的 1 行:
random_select 10 a.list
但是,这并没有给我一个确切的数量:
aaa> foreach i ( 0 1 2 3 4 5 6 7 8 9 )
foreach? random_select 10 a.list | wc -l
foreach? end
4739
4865
4739
4889
4934
4809
4712
4842
4814
4817
我的另一个想法是吞食输入文件,然后从数组中随机选择n,但如果我有一个非常大的文件,那就是个问题了。
有什么想法吗?
编辑:这是this问题的完全相同。
【问题讨论】:
-
这不是stackoverflow.com/questions/692312/…的完全相同的副本
-
是的。对不起。我会将两者联系起来并投票关闭它。
-
不,另一个问题允许样本被关闭 - 这个问题需要一个确切的数字。
-
不要关闭它 - 它不是重复
标签: perl random-sample file-processing