Perl -追加到文件的最后一行(同一行)

uqxowvwt  于 2023-06-06  发布在  Perl
关注(0)|答案(4)|浏览(789)

有人能告诉我如何根据当前值追加输出文件的最后一项吗?
例如,我正在生成一个输出.txt文件,例如:

a b c d 10

经过一些处理,我得到了值20,现在我希望该值被赋值并与之前的集合对齐,使它:

a b c d 10 20
wnavrhmk

wnavrhmk1#

假设最后一行没有换行符

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";

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

u4dcyp6a

u4dcyp6a2#

试试

  • 一行程序 * 版本
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
k4emjkb1

k4emjkb13#

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

说明:通过设置输入记录分隔符-0777来读取整个文件,对与文件结尾匹配的数据读取执行替换,或者就在最后一个换行符之前。
您还可以使用-i开关对输入文件进行就地编辑,但这种方法有风险,因为它会执行不可逆的更改。它可以与备份一起使用,例如-i.bak,但是该备份在多次执行时会被覆盖,因此我通常建议使用shell重定向,就像我上面所做的那样。

tgabmvqs

tgabmvqs4#

首先读取整个文件,你可以通过这个子例程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";

相关问题