eliminar desde el principio del archivo hasta la enésima aparición del patrón

eliminar desde el principio del archivo hasta la enésima aparición del patrón

Buscando el comando de la herramienta de línea de comando (awk, sed, etc.) para omitir líneas desde el principio de un archivo hasta la enésima aparición de un patrón. Dicho de otra manera, imprima solo desde la enésima aparición del patrón hasta el final del archivo. Supongamos una coincidencia por línea; La línea no necesariamente comienza con el patrón.

por ejemplo, omitir desde el principio del archivo hasta el segundo fooen lo siguiente:

something
abc foo1
maybe something else
foo2 -this line and anything before is gone- 
maybe not
foo3
something

Resultado deseado:

maybe not
foo3
something

Puntos de bonificación por incluir/excluir la línea con la enésima aparición.

Respuesta1

Aexcluirla enésima aparición del patrón

awk -v 'n=3' 'NR == 1, /pattern/ && !--n {next}; 1'

(reemplace 3con la cantidad de ocurrencias que desee (2 en su caso) y patterncon su patrón real ( fooen su caso)).

Ejemplo:

$ seq 30 | awk -v 'n=3' 'NR == 1, /6/ && !--n {next}; 1'
27
28
29
30

Aincluirla enésima aparición del patrón

awk -v 'n=3' '/pattern/ && !--n, 0'

Ejemplo:

$ seq 30 | awk -v 'n=3' '/6/ && !--n, 0'
26
27
28
29
30

Respuesta2

% perl -ne 'BEGIN{$NTH=2;$p=0} print if $p; /foo/ && $NTH--; $p=1 if !$NTH' input
maybe not
foo3
something

¿Dónde NTHestá cuántas veces? Y luego necesita una bandera para imprimir; disminuir NTHal coincidir y habilitar la impresión si NTHse reduce lo suficiente.Muévete printhasta el final para atrapar lo último que deseas foo.

información relacionada