根据perl中的行号修剪线条

时间:2018-01-17 07:32:22

标签: perl line

我的Perl文件生成的文本文件通常包含200行。有时超过200行(例如217行)。我需要从第201行剪掉其余的线。我已经使用计数器方法来修剪超出的线条。有没有其他简单有效的方法来做到这一点?

代码:

#!/usr/bin/perl -w
use strict;
use warnings;

my $filename1="channel.txt";
my $filename2="channel1.txt";
my $fh;
my $fh1;
my $line;
my $line1;
my $count=1;
open  $fh, '<', $filename1 or die "Can't open > $filename1: $!";
open  $fh1, '>', $filename2 or die "Can't open > $filename2: $!";

while(my $line = <$fh>)
{ 
  chomp $line;
  chomp $line1;
  if($count<201)
     {
        print $fh1 "$line\n";
     } 
     $count++;
}
close ($fh1);
close($fh);

4 个答案:

答案 0 :(得分:2)

xxfelixxx 已经为您提供了正确的答案。我只是更改我之前发布的答案,清理代码并回写到原始文件:

use strict;
use warnings;

my @array;
my $filename="channel.txt";
open my $fh, '<', $filename or die "Can't open > $filename: $!";

while( my $line = <$fh> ) {
    last if $. > 200;
    push @array, $line;
}
close($fh);
open $fh, '>', $filename or die "Can't open > $filename: $!";
print $fh @array;
close($fh);

答案 1 :(得分:2)

我已经在评论中提到过,这是该评论的简短版本如果你真的试图修剪文件你可以使用Perl One Liner而不是编写整个代码

perl -pe 'last if($. == 201);' input.text >result.txt
  

-p用于逐行处理文件打印输出

     

-e执行标志,执行Perl语法

使用Perl脚本,您也可以这样做

open my $fh,"<","input.txt";
open my $wh,">","result.txt";

print $wh scalar <$fh> for(1..10);

答案 2 :(得分:1)

没有必要保留自己的计数器,perl有一个特殊的变量$.来跟踪输入的行号。您可以这样简化循环:

while( chomp( my $line = <$fh> ) ) {
    last if $. > 200;
    print $fh1 "$line\n";
}

perldoc perlvar - 搜索 INPUT_LINE_NUMBER

答案 3 :(得分:0)

要回写原始文件:setState()而不使用重定向:

input.txt

,其中

perl -pi.tmp -we "last if $.>200;" input.txt