Como extrair as linhas que possuem a seqüência dada?

0

Eu estou tentando encontrar um comando que está extraindo apenas as linhas que possuem todos os caracteres em uma sequência e na ordem abaixo de um arquivo de texto.

800900100011001200 .. (decrescente de 100) 369121518 (ascendente por 3)

Posso fazer isso em um comando para imprimir apenas as linhas que têm apenas ordens acima ou preciso fazer um comando para cada sequência?

    
por Ahmed 26.10.2018 / 15:34

1 resposta

3

Uma abordagem usando perl operador regex experimental de (??{...}) para sequências de 3 ou mais números decimais em sequência linear:

perl -lne 'print if m{^(\d+)(\d+)(?=(.+$))(??{
  my $i = $2; my $r; my $l = length $3; my $incr = $2 - $1;
  while (length($r) < $l) {$i += $incr; $r .= $i}; $r})$}'

Tenha em atenção que 000000 é 0000, 0, 0 ou 0, 0, 0, 0, 0, 0 e também 1023 , ou seja, 1, 02, 3, mas o modo como funciona , não em 1203 como funciona, para a parte depois dos 2 primeiros números, ele espera uma lista de números sem 0s iniciais.

Da mesma forma, ele relata 10-1 , mas não -101 , pois - não é esperado nos dois primeiros números.

Você poderia resolver isso com:

perl -lne 'print if m{^(-?\d+)(-?\d+)(?=(.+$))(??{
  my $i = $2; my $r, $sign, $value; my $m = $3; my $incr = $2 - $1;
  while (($i += $incr),
         (($sign, $value) = ($i =~ /(-?)(\d*)/)),
         $m =~ /^(${sign}0*$value)(.*)/) {
    $r .= $1; $m = $2;
  }; $r})$}'

Com o qual ele informaria 12000034 , -101 , -1-2-3 , 0-123-246 ...

    
por 26.10.2018 / 17:33