Назад | Перейти на главную страницу

perl + Соответствует последнему числу в файле и уменьшает его на единицу

Я хочу добавить следующую команду perl в свой сценарий bash, пожалуйста, посоветуйте

как изменить (уменьшить на единицу) последнее число, начинающееся с символа "+" в файле с 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

Когда я слышу "сделайте что-нибудь при ПОСЛЕДНЕМ появлении ...", я тянусь к 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 "$@"; }

Можно следующий скрипт:

#!/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);