find . -type f -exec \
awk '/completed simulation/{x=1} /STATUS PASSED/{y=1} END{if (x&&y) print FILENAME}' {} \; |
wc -l
Я печатаю совпадающие имена файлов на случай, если это пригодится в каком-то другом контексте, но передача этого в wc не удастся, если имена файлов содержат символы новой строки - если это так, просто напечатайте 1 или что-нибудь еще из awk.
Поскольку find /directory_path/*.txt -type f
- это то же самое, что и ls /directory_path/*.txt
, если все файлы ".txt" являются файлами, тем не менее, это звучит так, как будто все, что вам действительно нужно (используя GNU awk для nextfile
):
awk '
FNR==1 { x=y=0 }
/completed simulation/ { x=1 }
/STATUS PASSED/ { y=1 }
x && y { cnt++; nextfile }
END { print cnt+0 }
' /directory_path/*.txt
или с любым awk:
awk '
FNR==1 { x=y=f=0 }
/completed simulation/ { x=1 }
/STATUS PASSED/ { y=1 }
x && y && !f { cnt++; f=1 }
END { print cnt+0 }
' /directory_path/*.txt
Они будут работать независимо от того, какие символы в именах ваших файлов.