Я хочу добавить следующую команду 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);