open my $fh, '<', $file or die "$file : $!";
my $p = int( 1 + rand -s $fh );
seek $fh, $p - $GLEN, 0;
chomp( my $pick = <$fh> );
chomp( $pick = <$fh> ) while tell( $fh ) < $p;
####
#! perl -slw
use strict;
our $GLEN ||= 10;
our $TRIES ||= 1000;
sub randLine {
open my $fh, '<', $_[ 0 ] or die "$_[ 0 ] : $!";
my $p = int( 1 + rand -s $fh );
seek $fh, $p - $GLEN, 0;
chomp( my $pick = <$fh> );
chomp( $pick = <$fh> ) while tell( $fh ) < $p;
return $pick;
}
my %stats;
for ( 1 .. $TRIES ) {
$stats{ randLine( $ARGV[ 0 ] ) }++ ;
}
print "$_ : $stats{ $_ }" for sort keys %stats;
####
P:\test>414916 -GLEN=10 -TRIES=100000 junk
line 1 : 9964
line 10 : 11168
line 2 : 9862
line 3 : 9999
line 4 : 9889
line 5 : 9853
line 6 : 9749
line 7 : 9963
line 8 : 9751
line 9 : 9802
P:\test>414916 -GLEN=100 -TRIES=100000 junk
line 1 : 9910
line 10 : 11195
line 2 : 9826
line 3 : 9830
line 4 : 9851
line 5 : 9772
line 6 : 9965
line 7 : 9854
line 8 : 9991
line 9 : 9806
####
P:\test>414916 -GLEN=7 -TRIES=100000 junk
ine 1 : 1239
ine 10 : 1199
ine 2 : 1273
ine 3 : 1265
ine 4 : 1233
ine 5 : 1223
ine 6 : 1166
ine 7 : 1245
ine 8 : 1268
ine 9 : 1251
line 1 : 8594
line 10 : 8575
line 2 : 8630
line 3 : 8647
line 4 : 8534
line 5 : 8666
line 6 : 8768
line 7 : 8714
line 8 : 8581
line 9 : 8683
ne 10 : 1246