在这个问题的基础上,我需要从文件(或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个元素,但如果文件过大就会出现问题。
有什么其他的想法吗?
编辑:这与此问题完全相同。