加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

阅读最后两行,而不是Perl中的前两行

发布时间:2020-12-15 23:28:01 所属栏目:大数据 来源:网络整理
导读:我正在尝试创建一个输出文件最后两行的Perl脚本.我当前的脚本完成了我想要的,除了它读取前两行而不是后两行. use strict;use warnings;my $file = 'test.txt';open my $info,$file or die "Could not open $file: $!";while( my $line = $info) { print $lin
我正在尝试创建一个输出文件最后两行的Perl脚本.我当前的脚本完成了我想要的,除了它读取前两行而不是后两行.

use strict;
use warnings;

my $file = 'test.txt';
open my $info,$file or die "Could not open $file: $!";

while( my $line = <$info>)  {   
    print $line;    
    last if $. == 2;
}

close $info;

我必须改变什么,以便脚本读取最后两行而不是前两行?

解决方法

这比打印第一行更难!以下是一些选项,从最少到最聪明:

只需使用尾巴

因为谁真的需要一个perl脚本来打印文件的最后两行?

将文件中的所有行读入列表,然后打印最后两行.

print do {
    open my $info,$file or die ...;
    (<$info>)[-2,-1];
};

读取文件中的所有行,只记住最后两行.

open my $info,$file or die ...;
my @lines;
while (my $line = <$info>) {
  shift @lines if @lines == 2;
  push @lines,$line;
}
print @lines;

向后阅读文件,寻找行尾;当找到两个时,从那一点开始向前看.

这是最有效的内存,特别是如果一条“线”令人担忧地长,但很复杂.但是,它有一个模块:File::ReadBackwards.它可以让你:

use File::ReadBackwards;
my $info = File::ReadBackwards->new($file) or die ...;
my $last = $info->readline;
my $second_last = $info->readline;
print $second_last,$last;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读