首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Windows上使用纯Perl读取文件的最后一行?

如何在Windows上使用纯Perl读取文件的最后一行?
EN

Stack Overflow用户
提问于 2016-04-12 08:52:17
回答 4查看 2.6K关注 0票数 0

我只需要读取文件的最后一行,而不需要使用File:ReadBackwards模块,因为它没有安装在我需要执行脚本的远程服务器(Windows)上。请建议只读最后一行最有效的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-12 10:09:07

你在窗户里。我不知道windows的inbuild命令是什么,但是您可以尝试如下所示

使用while循环迭代文件处理程序,并将输出存储在变量中,然后打印出来。

代码语言:javascript
运行
复制
open my $fh ,"<","file.txt";
my $last_line;
$last_line = $_,while (<$fh>);
print $last_line;

否则,请尝试下面的操作,但这会消耗更多的内存。

代码语言:javascript
运行
复制
open my $fh ,"<","file.txt" or die "error opening $!";
my @ar = <$fh>;
print $ar[-1];

否则

代码语言:javascript
运行
复制
open my $fh ,"<","file.txt" or die "error opening $!";
my @ar = <$fh>;
print pop @ar;
票数 1
EN

Stack Overflow用户

发布于 2016-04-12 08:56:31

此答案不适用于Windows。

如果这是一次性的事情,只需做一个系统调用和使用tail

代码语言:javascript
运行
复制
my $last_line = `tail -n 1 $filename`;

如果您需要做大量的工作,请考虑在远程计算机上安装本地库,或者在部署脚本之前将脂肪包装文件::ReadBackwards安装到脚本中。

票数 7
EN

Stack Overflow用户

发布于 2016-04-15 00:16:18

如果您了解一些关于文件的内容(如果行的长度相对相等,或者每行最多是X字节,或者其他什么),那么您可能可以使用line来做一些事情。例如,如果最后一行最多为40字节左右,则可以执行以下操作。如果您知道该文件是100 MB (使用File::stat,这是核心文件),您可以对前10行进行平均值,查看它们是多少字节,并可能将其乘以5,以防万一,然后返回,然后执行循环。你可能需要读15或20行,但这还不错。

代码语言:javascript
运行
复制
open(my $input,"input2.txt")||die "can't open the file";

my $last_line;
seek ($input, -50, 2);
while(<$input>)
{
    $last_line = $_;
}

print "$last_line\n";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36568162

复制
相关文章

相似问题

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