我是Perl新手,有人可以让我知道如何根据当前值附加输出文件的最后一个条目吗?例如,我正在生成输出txt文件
a b c d 10
Run Code Online (Sandbox Code Playgroud)
通过一些处理,我得到值20,现在我想要分配该值20并与之前的设置对齐
a b c d 10
Run Code Online (Sandbox Code Playgroud)
并使其成为
a b c d 10 20
Run Code Online (Sandbox Code Playgroud)
Ola*_*che 11
假设最后一行没有换行符
use strict;
use warnings;
open(my $fd, ">>file.txt");
print $fd " 20";
Run Code Online (Sandbox Code Playgroud)
如果最后一行已经有换行符,则输出将在下一行结束,即
a b c d 10
20
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下工作的较长版本都是
use strict;
use warnings;
open(my $fd, "file.txt");
my $previous;
while (<$fd>) {
print $previous if ($previous);
$previous = $_;
}
chomp($previous);
print "$previous 20\n";
Run Code Online (Sandbox Code Playgroud)
但是,此版本不会修改原始文件.
单行版
perl -pe 'eof && do{chomp; print "$_ 20"; exit}' file.txt
Run Code Online (Sandbox Code Playgroud)
脚本版本
#!/usr/bin/env perl
use strict; use warnings;
while (defined($_ = <ARGV>)) {
if (eof) {
chomp $_;
print "$_ 20";
exit;
}
}
continue {
die "-p destination: $!\n" unless print $_;
}
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
perl -0777 -pe 's/$/ 20/' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
说明:通过设置输入记录分隔符来读取整个文件-0777,对读取的与文件结尾匹配的数据或最后一个换行符之前的数据进行替换。
您还可以使用该-i开关对输入文件进行就地编辑,但该方法存在风险,因为它会执行不可逆转的更改。它可以与备份一起使用,例如-i.bak,但该备份会在多次执行时被覆盖,因此我通常建议使用 shell 重定向,就像我上面所做的那样。
| 归档时间: |
|
| 查看次数: |
35223 次 |
| 最近记录: |