in reply to How can I read just the end of a huge file?
Count the lines in the file ( how to do this is documented in perlfaq ), subtract 20000 from that number and put the result in $start_at, then open the logfile for reading, incrementing the counter for each line read in and ignore until you've hit $start_at ...
Or ... 75MB is not *that* huge these days. You could load the whole file into memory and just grab the last 20000 lines, e.g.
# get_last returns an array reference for efficiency, # so we need to de-reference; hence the @{} around # the subroutine call my @lines = @{ get_last("foo.log", 20000) }; sub get_last { my ($filename, $from_last) = @_; open FILE, $filename or die "Can't open $filename: $!\n"; my @lines = <FILE>; #loads the whole thing into memory close FILE; # return the last $from_last lines in an anonymous array # $#array_name is the index of the last element of # the array, so @lines[$#lines-20, $#lines] is the # last 20 elements of @lines [ @lines[$#lines-$from_last, $#lines] ]; }
HTH
Philosophy can be made out of anything. Or less -- Jerry A. Fodor
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: How can I read just the end of a huge file?
by turnstep (Parson) on Mar 12, 2001 at 22:20 UTC | |
by tye (Sage) on Mar 12, 2001 at 22:35 UTC | |
by webdaemon (Acolyte) on Mar 13, 2001 at 13:14 UTC |