Сначала удалите список файлов:
rm flist
Затем для каждого слова добавьте файл в список файлов, если он содержит это слово:
grep -l WORD * >>flist
Затем сортируйте, унифицируйте и получайте счет:
sort flist | uniq -c >flist_with_count
Все те файлы в flsit_with_count, у которых нет количества слов, должны быть удалены. Формат будет:
2 file1
7 file2
8 file3
8 file4
Если было 8 слов, то файл1 и файл2 должны быть удалены. Я оставлю написание / тестирование сценария вам.
Хорошо, вы меня убедили, вот мой сценарий:
#!/bin/bash
rm -rf flist
for word in fopen fclose main ; do
grep -l ${word} *.c >>flist
done
rm $(sort flist | uniq -c | awk '$1 != 3 {print $2} {}')
При этом удаляются файлы в каталоге, в котором не было всех трех слов: