Это известная задача, которую легко описать:
При наличии текстового файла foo.txt и файла черного списка исключающих строк, по одной на строку, создается файл foo_filtered.txt, содержащий только строкиfoo.txt, который не содержит строки исключения.
Распространенным приложением является фильтрация предупреждений компилятора из журнала сборки, но игнорирование предупреждений для файлов, которые не являются вашими.Файл foo.txt - это файл предупреждений (сам по себе отфильтрованный из журнала сборки) и файл черного списка исключенных_файлов.txt с именами файлов, по одному на строку.
Я знаю, как это делается на процедурных языках, таких как Perl илиAWK, и я даже сделал это с помощью комбинаций команд Linux, таких как cut, comm и sort.
Но я чувствую, что должен быть очень близок с xargs и просто не могу видеть последний шаг.
Я знаю, что если в exclusive_filenames.txt есть только 1 имя файла, то
grep -v foo.txt `cat excluded_filenames.txt`
сделает это.
И я знаю, что могу получитьимена файлов по одному на строку с
xargs -L1 -a excluded_filenames.txt
Итак, как мне объединить эти два в одно решение без явных циклов в процедурном языке?
Ищете простое и элегантное решение.