perl + 匹配文件中的最后一个数字并将其减少一

perl + 匹配文件中的最后一个数字并将其减少一

我想在我的 bash 脚本中添加以下 perl 命令,请提供建议

如何使用 perl 更改(减少一)文件中以“+”字符开头的最后一个数字?

Example of original file   ( before run the perl command )

more file




432423
53454
+535
343
45
+1000

请求的输出文件示例(运行 perl 命令后)

more file




432423
53454
+535
343
45
+999

答案1

当我听到“在最后一次发生...时做某事”时,我会tac反转线路,并在第一次出现时执行某些操作。

tac file | nawk '/^\+/&&!done {$1 = "+" substr($1,2)-1; done=1} 1' | tac

在 Solaris 上,你可能没有安装 tac。你可以像这样实现它

tac() { sed -n -e '1!G' -e '$p' -e h "$@"; }

答案2

你可以使用以下脚本:

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

open(INFILE, "< file") or die( "Can't open input file" );
open(OUTFILE, "> file.out") or die( "Can't open output file" );
my @lines = reverse <INFILE>;
foreach my $line (@lines) {
    if ($line =~ /^\+(\d+)/) {
        $line = "+".($1-1)."\n";
        last;
    }
}
my @lines2 = reverse @lines;
foreach my $line (@lines2) {
    print OUTFILE $line;
}
close(OUTFILE);

相关内容