%C3%A9sima%20coincidencia%20en%20grep.png)
¿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 N
es 10, utilícelo tail +11
para 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
, N
y K
según sea necesario.
El primer bloque realizará un seguimiento de cada vez que se encuentre el patrón. Una vez que pasa el N
umbral, el segundo bloque comienza a imprimir cada línea. El segundo bloque dejará de imprimir una vez que K
se 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 c
cada vez que coincide con el patrón. Si c
llega 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>=0
significa siempre que k
el valor sea mayor que 0
y menor que 2
, imprima las líneas.
Respuesta4
grep 'PATTERN' FILENAME | tail -n +M
¿ Dónde M
está N+1?