Ignore las primeras N coincidencias e imprima (N+1)ésima coincidencia en grep

Ignore las primeras N coincidencias e imprima (N+1)ésima coincidencia en grep

¿Cómo puedo hacer que grep ignore las primeras N coincidencias en un archivo, luego imprima (N+1)ésima coincidencia y todas las k líneas posteriores y luego salga?

Respuesta1

Simplemente canalice el resultado atail(1). Por ejemplo, si Nes 10, utilícelo tail +11para omitir las primeras 10 coincidencias:

grep pattern file | tail +11

Respuesta2

Una solución alternativa en awk:

awk '/pattern/ { found++ } found > N && printed <= K { print; printed++ }' file

Más legible:

awk '
# Initialize to zero for clarity
BEGIN {
  found = 0
  printed = 0
}

# Check for a pattern match
/pattern/ {
  found++
  # Found one match
}

# Check if it's the right time to print
found > N && printed <= K {
  print
  printed++
  # Printed once
}' file

Asegúrese de completar pattern, Ny Ksegún sea necesario.

El primer bloque realizará un seguimiento de cada vez que se encuentre el patrón. Una vez que pasa el Numbral, el segundo bloque comienza a imprimir cada línea. El segundo bloque dejará de imprimir una vez que Kse alcance el umbral.

Respuesta3

puedes usarawk

awk 'd && k--&&k>=0; c>=3 && /pattern/{d=1;k=2} /pattern/{c++};' file

El primer valor /3/{c++} incrementa ccada vez que coincide con el patrón. Si cllega a la cuenta de 3, por ejemplo, establezca una bandera ( d) y establezca el número de líneas después de ella ( k=2). d && k--&&k>=0significa siempre que k el valor sea mayor que 0y menor que 2, imprima las líneas.

Respuesta4

grep 'PATTERN' FILENAME | tail -n +M

¿ Dónde Mestá N+1?

información relacionada