Как я могу перейти от одного пункта к другому, игнорируя первый матч? - PullRequest
1 голос
/ 14 января 2020

Я хочу выполнить grep от одной строки до второго появления другой строки. Файл примера:

11111111
22222222
33333333
44444444
55555555
66666666
77777777
88888888
77777777
99999999

Например, мое первое совпадение - «22222222», второе совпадение - второе вхождение «77777777», поэтому результат будет:

22222222
33333333
44444444
55555555
66666666
77777777
88888888
77777777

Я знаю, что могу используйте sed, чтобы перейти от первого совпадения ко второму, например:

sed -n -e '/22222222/,/77777777/ p'

Однако я изо всех сил стараюсь не обращать внимания на первые 77777777, я пытался добавить 2,$, Но это дает мне ошибку. Как я могу достичь этого?

1 Ответ

3 голосов
/ 14 января 2020

Не могли бы вы попробовать следующее.

awk '$0==22222222{found1++} $0==77777777{found2++} found1;found2==2{exit}' Input_file

Объяснение: Добавление подробного объяснения для приведенного выше кода.

awk '             ##Starting awk program from here.
$0==22222222{     ##Checking if line is 22222222 then do following.
  found1++        ##Creating variable found1 and keep increasing its value by 1 here.
}                 ##Closing BLOCK for above condition here.
$0==77777777{     ##Checking if line is 77777777 then do following.
  found2++        ##Creating variable found2 and keep increasing its value by 1 here.
}                 ##Closing BLOCK for above condition here.
found1            ##Checking condition if found1 variable is NOT NULL then it will print that line.
found2==2{        ##Checking condition if variable found2 is equal to 2 then do following.
  exit            ##Using exit function of awk to exit from program since 2nd occurrence if found and NO need to read rest of the file.
}
' Input_file      ##Mentioning Input_file name here.
  • Использование exit сэкономит наше время; почему, поскольку после того, как 2-е вхождение 77777777 найдено, нет необходимости читать оставшуюся часть файла Input_file.
...