Необходимо зафиксировать количество строк между двумя критериями поиска

#linux #bash #awk

#linux #bash #awk

Вопрос:

Мне нужно фиксировать количество строк между каждым оператором УДАЛЕНИЯ.

 DELETE FROM database.table
WHERE
@1=A
@2=B
@3=C
@4=D
@5=D
DELETE FROM database.table
WHERE
@1=A
@2=B
@3=C
@4=D
@5=D
DELETE FROM database.table
WHERE
@1=A
@2=B
@3=C
@4=D
@5=D
  

Поэтому я бы получил возвращенный статус «5»

Я пробовал следующее:

 awk '/DELETE/{exit}flag;/WHERE/{flag=1}' delete_statements | wc -l
  

Но это работает только в том случае, если я удаляю первую строку в файле.

Ответ №1:

Чтобы пропустить первую строку из awk, просто добавьте условие:

 awk 'NR>1 amp;amp; /DELETE/{exit}flag;/WHERE/{flag=1}'
     ~~~~
  

Ответ №2:

Попробуйте это :

 awk '/WHERE/{next} !/DELETE/{flag  } NR>1 amp;amp; /DELETE/{print flag;exit}' file
  

Вывод

 5