忽略前 N 個匹配項並在 grep 中列印第 (N+1) 個匹配項

忽略前 N 個匹配項並在 grep 中列印第 (N+1) 個匹配項

如何讓 grep 忽略檔案中的前 N ​​個符合項,然後列印第 (N+1) 個符合項及其後面的所有 k 行,然後退出。

答案1

只需將結果透過管道傳輸到tail(1)。例如,如果N是 10,則用於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

確保根據需要填寫patternNK

第一個區塊將追蹤每次發現模式的時間。一旦超過N閾值,第二個區塊就開始列印每一行。一旦K達到閾值,第二個區塊將停止列印。

答案3

您可以使用awk

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

每次匹配模式時,首先/3/{c++} 都會增加值。例如,c如果計數達到 3,則設定一個標誌 ( ),並設定其後的行數 ( )。表示只要 值大於或小於,就列印行。cdk=2d && k--&&k>=0k02

答案4

grep 'PATTERN' FILENAME | tail -n +M

其中MN+1

相關內容