처음 N개 일치 항목을 무시하고 grep에서 (N+1)번째 일치 항목을 인쇄합니다.

처음 N개 일치 항목을 무시하고 grep에서 (N+1)번째 일치 항목을 인쇄합니다.

grep이 파일의 첫 번째 N 일치 항목을 무시하고 (N+1) 번째 일치 항목과 그 뒤의 모든 k 줄을 인쇄한 다음 종료하도록 하려면 어떻게 해야 합니까?

답변1

결과를 다음으로 파이프하면 됩니다.tail(1). 예를 들어, N10이면 tail +11처음 10개 일치 항목을 건너뛰는 데 사용합니다.

grep pattern file | tail +11

답변2

다음의 대체 솔루션 awk:

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

더 읽기 쉽게:

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

pattern필요에 따라 , N및 를 입력했는지 확인하세요 K.

첫 번째 블록은 패턴이 발견될 때마다 추적합니다. 임계값 을 통과하면 N두 번째 블록이 각 줄을 인쇄하기 시작합니다. 두 번째 블록은 K임계값에 도달 하면 인쇄를 중지합니다 .

답변3

당신이 사용할 수있는awk

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

First는 패턴과 일치할 때마다 값을 /3/{c++} 증가시킵니다 c. 예를 들어 3개에 도달 하면 c플래그( d)를 설정하고 그 뒤의 줄 수( k=2)를 설정합니다. 값보다 크거나 작 으면 d && k--&&k>=0해당 줄을 인쇄합니다.k02

답변4

grep 'PATTERN' FILENAME | tail -n +M

MN+1은 어디에 있나요?

관련 정보