Предполагая возможность наличия нескольких строк в строке (только в ответе Walter A ), вот его версия awk (та, которая поддерживает nextfile
)
awk '(FNR==1){n=0}
{n+=split($0,a,/CREATE TABLE/)-1}
(n>2) {print FILENAME; nextfile}' */.sql
Если у вас нет GNU grep (согласно решению Вальтера А) и у вас нет awk с nextfile
, можно использовать следующие решения (POSIX):
awk '(FNR==1){n=0; p=1}
p {n+=split($0,a,/CREATE TABLE/)-1}
(n>2) && p {print FILENAME; p=0}' */.sql
Разница между этими двумя решениями:
- Решение 1 не будет обрабатывать полный файл, поскольку при выполнении условия будет создано досрочное завершение для каждого файла.
- Решение 2 не может выполнить такое действие, однако мы можем сократить вычислительное время, избегая
split
, если условие выполняется.