Aqui está uma solução perl
:
$ perl -anle 'BEGIN {$pattern = "TEST01N"}
$curr = $F[0] =~ s/$pattern//r;
if ($prev and ++$prev != $curr) {
printf "%s%02d empty\n", $pattern, $prev;
redo;
}
$prev = $curr;
print;
' file
TEST01N01 40 2002 2697 2523
TEST01N02 40 4 4 5
TEST01N03 empty
TEST01N04 40 4 4 5
TEST01N05 40 4 4 5
TEST01N06 empty
TEST01N07 40 4 4 5
TEST01N08 40 1 4 5
TEST01N09 40 4 4 5
TEST01N10 40 4 4 5
TEST01N11 40 2002 2621 2617
TEST01N12 empty
TEST01N13 40 1 4 5
TEST01N14 40 1 4 5
TEST01N15 40 1 4 5
TEST01N16 40 1 4 5
TEST01N17 40 2002 2576 2515
Explicação
- Obtemos o índice da coluna atual, salve na variável
$curr
- Se
$prev
for definido e seu valor mais 1 não for igual a$curr
, o que significa que faltou a entrada, imprimi-lo e refazer desde o início até$prev
equal$curr
. - Atribua
$curr
valor a$prev
. - Imprima a linha.
Atualizar
Para o comentário de @Baby, você pode tentar:
$ perl -anle 'BEGIN {$pattern = "TEST01N"}
$curr = $F[0] =~ s/$pattern//r;
if ($. == 1 and (0+$curr) != ++$i) {
printf "%s%02d empty\n", $pattern, $i;
redo;
}
if ($prev and ++$prev != $curr) {
printf "%s%02d empty\n", $pattern, $prev;
redo;
}
$prev = $curr;
print;
' file