Eduardo escreveu:
> node1:~# cat x.txt
>
> <INCLUIR>
> ..CLASSE:MS
> -MANDADO
> -8901223244
> ..ID_DOCUMENTO:22
> <INCLUIR>
> ..CLASSE:MS
> -MANDADO
> -8901223245
> ..ID_DOCUMENTO:23
> <INCLUIR>
> ..CLASSE:MS
> -MANDADO
> -8901223246
> ..ID_DOCUMENTO:24
> <INCLUIR>
> ..CLASSE:MS
> -MANDADO
> -8901223247
> ..ID_DOCUMENTO:25
> <INCLUIR>
> ..CLASSE:MS
> -MANDADO
> -8901223248
> ..ID_DOCUMENTO:26
> <INCLUIR>
> ..CLASSE:MS
> -MANDADO
> -8901223249
> ..ID_DOCUMENTO:27
>
> e deveria ficar assim:
>
> node1:~# cat y.txt
>
> <INCLUIR>
> ..ID_DOCUMENTO:22
> ..CLASSE:MS
> -MANDADO
> -8901223244
> <INCLUIR>
> ..ID_DOCUMENTO:23
> ..CLASSE:MS
> -MANDADO
> -8901223245
> <INCLUIR>
> ..ID_DOCUMENTO:24
> ..CLASSE:MS
> -MANDADO
> -8901223246
> <INCLUIR>
> ..ID_DOCUMENTO:25
> ..CLASSE:MS
> -MANDADO
> -8901223247
> <INCLUIR>
> ..ID_DOCUMENTO:26
> ..CLASSE:MS
> -MANDADO
> -8901223248
> <INCLUIR>
> ..ID_DOCUMENTO:27
> ..CLASSE:MS
> -MANDADO
> -8901223249
Estou acompanhando esta thread e vi a solução do Flávio. Muito legal.
Nunca fiz nada em ed. Entretanto, fiz uma solução com sed que também
serviu de aprendizado.
sed 'x;n;N;N;x;N;G' x.txt
Basicamente tem a ver com manipulação do que o sed chama de pattern
space e hold space.
Quanto à performance, segue um teste com arquivos de 1.7Mb (143998 linhas)
$ time ed x.txt <<<$'g/^\.\.ID_DOC/m.-4\nw\nq'
1098000
1098000
real 0m4.627s
user 0m4.560s
sys 0m0.036s
$ time sed -i 'x;n;N;N;x;N;G' x.txt
real 0m0.282s
user 0m0.228s
sys 0m0.052s
--
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP