Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get last few lines of file stored in variable

Tags:

perl

How could I get the last few lines of a file that is stored in a variable? On linux I would use the tail command if it was in a file.

1) How can I do this in perl if the data is in a file?
2) How can I do this if the content of the file is in a variable?
like image 217
user391986 Avatar asked Jan 30 '26 04:01

user391986


2 Answers

To read the end of a file, seek near the end of the file and begin reading. For example,

open my $fh, '<', $file;
seek $fh, -1000, 2;
my @lines = <$fh>;
close $fh;

print "Last 5 lines of $file are: ", @lines[-5 .. -1];

Depending on what is in the file or how many lines you want to look at, you may want to use a different magic number than -1000 above.

You could do something similar with a variable, either

open my $fh, '<', \$the_variable;
seek $fh, -1000, 2;

or just

open my $fh, '<', \substr($the_variable, -1000);

will give you an I/O handle that produces the last 1000 characters in $the_variable.

like image 81
mob Avatar answered Jan 31 '26 21:01

mob


The File::ReadBackwards module on the CPAN is probably what you want. You can use it thus. This will print the last three lines in the file:

use File::ReadBackwards
my $bw = File::ReadBackwards->new("some_file");
print reverse map { $bw->readline() } (1 .. 3);

Internally, it seek()s to near the end of the file and looks for line endings, so it should be fairly efficient with memory, even with very big files.

like image 36
DrHyde Avatar answered Jan 31 '26 21:01

DrHyde



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!