我的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);
答案 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