Perl - 附加到文件的最后一行

时间:2013-04-03 15:21:26

标签: perl append

我是Perl新手,有人可以让我知道如何根据当前值附加输出文件的最后一个条目吗? 例如。我正在生成输出txt文件说

a b c d 10

通过一些处理,我得到值20,现在我想要分配这个值20并与先前的集合对齐

a b c d 10

并将其设为

a b c d 10 20

4 个答案:

答案 0 :(得分:8)

假设最后一行没有换行符

use strict;
use warnings;

open(my $fd, ">>file.txt");
print $fd " 20";

如果最后一行已经有换行符,则输出将在下一行结束,即

a b c d 10
 20

在任何一种情况下工作的较长版本都是

use strict;
use warnings;

open(my $fd, "file.txt");
my $previous;
while (<$fd>) {
    print $previous if ($previous);
    $previous = $_;
}

chomp($previous);
print "$previous 20\n";

但是,此版本不会修改原始文件。

答案 1 :(得分:6)

尝试这样做

单线

perl -pe 'eof && do{chomp; print "$_ 20"; exit}' file.txt

脚本版

#!/usr/bin/env perl

use strict; use warnings;

 while (defined($_ = <ARGV>)) {
    if (eof) {
        chomp $_;
        print "$_ 20";
        exit;
    }
}
continue {
    die "-p destination: $!\n" unless print $_;
}

样本输出

$ cat file.txt
a b c d 08
a b c d 09
a b c d 10


$ perl -pe 'eof && do{chomp; print "$_ 20"; exit}' file.txt
a b c d 08
a b c d 09
a b c d 10 20

答案 2 :(得分:4)

perl -0777 -pe 's/$/ 20/' input.txt > output.txt

说明:通过使用-0777设置输入记录分隔符来读取整个文件,对与文件结尾匹配的数据读取执行替换,或者在最后一个换行符之前执行替换。

您还可以使用-i开关对输入文件进行就地编辑,但该方法存在风险,因为它会执行不可逆转的更改。它可以与备份一起使用,例如-i.bak,但是这个备份会在多次执行时被覆盖,所以我通常建议使用shell重定向,就像我上面所做的那样。

答案 3 :(得分:0)

首先读取整个文件,你可以通过这个子程序read_file

来完成
sub read_file {
    my ($file) = @_;
    return do {
        local $/;
        open my $fh, '<', $file or die "$!";
        <$fh>
    };
}

my $text = read_file($filename);
chomp $text;
print "$text 20\n";