-%C3%A9sima%20correspond%C3%AAncia%20no%20grep.png)
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 N
for 10, use tail +11
para 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
, N
e K
conforme necessário.
O primeiro bloco registrará cada vez que o padrão for encontrado. Assim que ultrapassar o N
limite, o segundo bloco começa a imprimir cada linha. O segundo bloco irá parar de imprimir quando o K
limite 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 c
o valor sempre que corresponde ao padrão. Se c
atingir a contagem de 3, por exemplo, defina um sinalizador ( d
) e defina o número de linhas depois dele ( k=2
). d && k--&&k>=0
significa contanto que k
o valor seja maior 0
e menor que 2
, imprima as linhas.
Responder4
grep 'PATTERN' FILENAME | tail -n +M
onde M
está N+1