perl + Combine o último número no arquivo e reduza-o por um

2

Eu quero adicionar o seguinte comando perl no meu script bash por favor conselho

como alterar (reduzir em um) o último número que começa com o caractere "+" no arquivo com perl?

Example of original file   ( before run the perl command )

more file




432423
53454
+535
343
45
+1000

exemplo de arquivo de saída solicitado (depois de executar o comando perl)

more file




432423
53454
+535
343
45
+999
    
por yael 10.05.2012 / 14:44

2 respostas

2

Quando ouço "fazer algo sobre a ÚLTIMA ocorrência de ...", eu alcanço tac para reverter as linhas, e fazer algo na primeira ocorrência.

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

No Solaris, você pode não ter o tac instalado. Você pode implementá-lo como este :

tac() { sed -n -e '1!G' -e '$p' -e h "$@"; }
    
por 10.05.2012 / 15:46
1

Você pode o seguinte script:

#!/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);
    
por 10.05.2012 / 15:02