我只需要读取文件的最后一行,而不需要使用File:ReadBackwards模块,因为它没有安装在我需要执行脚本的远程服务器(Windows)上。请建议只读最后一行最有效的方法。
发布于 2016-04-12 10:09:07
你在窗户里。我不知道windows的inbuild命令是什么,但是您可以尝试如下所示
使用while循环迭代文件处理程序,并将输出存储在变量中,然后打印出来。
open my $fh ,"<","file.txt";
my $last_line;
$last_line = $_,while (<$fh>);
print $last_line;否则,请尝试下面的操作,但这会消耗更多的内存。
open my $fh ,"<","file.txt" or die "error opening $!";
my @ar = <$fh>;
print $ar[-1];否则
open my $fh ,"<","file.txt" or die "error opening $!";
my @ar = <$fh>;
print pop @ar;发布于 2016-04-12 08:56:31
此答案不适用于Windows。
如果这是一次性的事情,只需做一个系统调用和使用tail。
my $last_line = `tail -n 1 $filename`;如果您需要做大量的工作,请考虑在远程计算机上安装本地库,或者在部署脚本之前将脂肪包装文件::ReadBackwards安装到脚本中。
发布于 2016-04-15 00:16:18
如果您了解一些关于文件的内容(如果行的长度相对相等,或者每行最多是X字节,或者其他什么),那么您可能可以使用line来做一些事情。例如,如果最后一行最多为40字节左右,则可以执行以下操作。如果您知道该文件是100 MB (使用File::stat,这是核心文件),您可以对前10行进行平均值,查看它们是多少字节,并可能将其乘以5,以防万一,然后返回,然后执行循环。你可能需要读15或20行,但这还不错。
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";https://stackoverflow.com/questions/36568162
复制相似问题