首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取存储在变量中的最后几行文件

获取存储在变量中的最后几行文件
EN

Stack Overflow用户
提问于 2011-07-13 05:01:42
回答 5查看 5.9K关注 0票数 3

如何获取存储在变量中的文件的最后几行?在linux上,如果结尾命令在文件中,我会使用它。

代码语言:javascript
运行
复制
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?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-13 05:13:10

在某种程度上,这取决于文件有多大,以及您想要多少行。如果它非常大,你需要小心,因为把它全部读到内存中比只读文件的最后一部分要花更长的时间。

如果它很小。最简单的方法可能是将其保存到内存中,通过记录分隔符进行File::Slurp,并保留最后n条记录。实际上,就像这样:

代码语言:javascript
运行
复制
# first line if not yet in a string
my $string = File::Slurp::read_file($filename);
my @lines = split(/\n/, $string);
print join("\n", @lines[-10..-1])

如果它很大,太大,无法在内存中找到,那么您可能更好地直接使用文件系统操作。当我这样做时,我打开文件并使用seek()读取文件的最后4k左右,然后向后重复,直到我有足够的数据来获得所需的记录数。

不是一个详细的答案,但问题可能会更具体一些。

票数 3
EN

Stack Overflow用户

发布于 2011-07-13 05:21:59

要读取文件的末尾,请在文件末尾附近执行seek并开始读取。例如,

代码语言:javascript
运行
复制
open my $fh, '<', $file;
seek $fh, -1000, 2;
my @lines = <$fh>;
close $fh;

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

根据文件中的内容或要查看的行数,您可能希望使用与上面的-1000不同的幻数。

您也可以使用变量执行类似的操作

代码语言:javascript
运行
复制
open my $fh, '<', \$the_variable;
seek $fh, -1000, 2;

或者只是

代码语言:javascript
运行
复制
open my $fh, '<', \substr($the_variable, -1000);

将为您提供一个生成$the_variable中最后1000个字符的I/O句柄。

票数 5
EN

Stack Overflow用户

发布于 2011-07-13 06:37:43

CPAN上的File::ReadBackwards模块可能就是您想要的。你可以这样使用它。这将打印文件中的最后三行:

代码语言:javascript
运行
复制
use File::ReadBackwards
my $bw = File::ReadBackwards->new("some_file");
print reverse map { $bw->readline() } (1 .. 3);

在内部,它会在文件末尾附近查找(),并查找行尾,因此即使对于非常大的文件,它在内存方面也应该相当有效。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6671065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档