grep на основе черного списка - без процедурного кода?

Это хорошо известная задача, которую легко описать:

Имеется текстовый файл foo.txt и файл черного списка строк исключения, по одной на line создайте файл foo_filtered.txt, содержащий только те строки файла foo.txt, которые не содержат никаких строк исключения.

Обычное приложение фильтрует предупреждения компилятора из журнала сборки, но игнорирует предупреждения о файлах, которые вам не принадлежат. Файл foo.txt - это файл предупреждений (сам отфильтрованный из журнала сборки) и файл черного списка excluded_filenames.txt с именами файлов, по одному в каждой строке.

Я знаю, как это делается на процедурных языках, таких как Perl или AWK, и я даже делал это с помощью комбинаций команд Linux, таких как cut, comm и sort.

Но я чувствую, что должен быть очень близок с xargs, и просто не вижу последнего шага.

Я знаю, что если в excluded_filenames.txt есть только одно имя файла, то

grep -v foo.txt `cat excluded_filenames.txt`

сделает это.

И я знаю, что могу получить имена файлов по одному в строке с помощью

xargs -L1 -a excluded_filenames.txt

Итак, как мне объединить эти два в одно решение без явных циклов на процедурном языке?

Ищете простое и элегантное решение.

5
задан alain.janinm 1 May 2012 в 09:41
поделиться