Nikola Janceski wrote:
> without using 'tail' how can I get the trailing 5 lines of a large file
> quickly, without loading it all to memory?
>
> is there anyway without pop and shifting through an array foreach line?
> (<= this is the only way I could think of doing it)
>
with a little seek and tell, try:
#!/usr/bin/perl -w
use strict;
my @character;
my @lines;
open(FH,"foo.txt") || die $!;
seek(FH,(-s "foo.txt")-2,0);
while(1){
read(FH,$b,1);
if($b eq "\n"){
unshift(@lines,join('',@character) . "\n");
@character = ();
last if(@lines == 5);
}else{
unshift @character,$b;
}
seek(FH,tell(FH)-2,0);
next unless(tell(FH) == 1);
read(FH,$b,1);
unshift @character,$b;
seek(FH,0,0);
read(FH,$b,1);
unshift @character,$b;
print join('',@character),"\n";
last;
}
close(FH);
#-- last 5 lines
print join('',@lines);
__END__
david
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]