Ignore as primeiras N correspondências e imprima a (N+1)-ésima correspondência no grep

Ignore as primeiras N correspondências e imprima a (N+1)-ésima correspondência no grep

Como posso fazer com que o grep ignore as primeiras N correspondências em um arquivo, depois imprima a (N+1)-ésima correspondência e todas as k linhas depois dela e depois saia.

Responder1

Basta canalizar o resultado paratail(1). Por exemplo, se Nfor 10, use tail +11para pular as primeiras 10 partidas:

grep pattern file | tail +11

Responder2

Uma solução alternativa em awk:

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

Mais legível:

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

Certifique-se de preencher pattern, Ne Kconforme necessário.

O primeiro bloco registrará cada vez que o padrão for encontrado. Assim que ultrapassar o Nlimite, o segundo bloco começa a imprimir cada linha. O segundo bloco irá parar de imprimir quando o Klimite for atingido.

Responder3

você pode usarawk

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

O primeiro /3/{c++} incrementa co valor sempre que corresponde ao padrão. Se catingir a contagem de 3, por exemplo, defina um sinalizador ( d) e defina o número de linhas depois dele ( k=2). d && k--&&k>=0significa contanto que k o valor seja maior 0e menor que 2, imprima as linhas.

Responder4

grep 'PATTERN' FILENAME | tail -n +M

onde Mestá N+1

informação relacionada