gpt4 book ai didi

perl - 如何在perl中删除文件的最后10行

转载 作者:行者123 更新时间:2023-12-03 06:41:43 24 4
gpt4 key购买 nike

我将总行数作为用户输入,然后从文件中删除这些行数。

我看到了这个 learn.perl.org/faq/perlfaq5.html#How-do-I-count-the-number-of-lines-in-a-file- 然后我厌倦了下面的简单逻辑。

逻辑:

  1. 获取总行数
  2. 减去用户输入的数字
  3. 打印行

这是我的代码:

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

open IN, "<", "Delete_line.txt"
or die " Can not open the file $!";
open OUT, ">", "Update_delete_line.txt"
or die "Can not write in the file $!";

my ($total_line, $line, $number, $printed_line);

print"Enter the number of line to be delete\n";
$number = <STDIN>;

while ($line = <IN>) {

$total_line = $.; # Total number of line in the file
}

$printed_line = $total_line - $number;

while ($line = <IN>) {

print OUT $line unless $.== $printed_line;
}

嗯,我没有收到任何代码错误或任何输出?为什么我就是不知道。

谁能给我一些建议吗?

最佳答案

对大文件有效的 Perl 解决方案需要使用 File::ReadBackwards

use File::ReadBackwards qw( );

my $num_lines = 10;
my $qfn = 'file.txt';

my $pos = do {
my $fh = File::ReadBackwards->new($qfn)
or die $!;
$fh->readline() for 1..$num_lines;
$fh->tell()
};

truncate($qfn, $pos)
or die $!;
  • 这不会读取整个文件两次(与 OP 的方法不同)。
  • 这不会读取整个文件(与 Tie::File 解决方案不同)。
  • 这不会将整个文件读入内存。

关于perl - 如何在perl中删除文件的最后10行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com