Ну ладно, если мы перешли от комментариев к ответам ...; -)
Вот один строковый элемент awk, который делает то же самое, что и однострочный perl DavidO, но в awkAwk меньше и, возможно, меньше, чем Perl.Но есть несколько разных реализаций awk.Я понятия не имею, будет ли ваш работать лучше, чем другие, или Perl.Вам нужно будет тестировать.
awk 'NR==FNR{a[$0]=1;next} {n=0;for(i in a){if($0~i){n=1}}} n' file1 file2
Что это делает (должно) сделать?
Первая часть скрипта awk соответствует только строкам в file1 (гденомер записи в текущем файле равен общему количеству записей) и заполняет массив.Вторая часть (которая запускается в последующих файлах) проходит по каждому элементу в массиве и проверяет, можно ли использовать его в качестве регулярного выражения для соответствия текущей строке ввода.
Второй блок кода начинается с "n", который был установлен в 0 или 1 в предыдущем блоке.В awk «1» оценивается как истина, а отсутствующий блок фигурных скобок считается эквивалентным {print}
, поэтому, если предыдущий блок обнаружил совпадение, этот будет печатать текущую строку.
Если file1 содержит строки вместо регулярных выражений, то вы можете изменить это для ускорения работы, заменив первое сравнение на if(index($0,i))...
.
Используйте с осторожностью.Ваш пробег может варьироваться.Создан на объекте, который может содержать орехи.