Использование GNU, awk
где он поддерживает определенные length(array)
функции (и некоторые другие awk
реализации, которые могут поддерживать) и не требуется, если файлы отсортированы.
gawk 'FNR==NR{seen[$0];next} ($0 in seen){delete seen[$0]};
END{print (!length(seen))?"Matched":"Not Matched"}' file2 file1
Это чтение файла2 в массив, называемый seen
ключом как целая строка файла2 .
Затем прочитайте file1 и для каждой строки, если она совпадает со строками в массиве, затем удалите этот ключ.
В конце, если массив был пустым, это означает, что все строки в файле2 существуют в файле1 и будут напечатаны Matched
, в противном случае будет отображаться Not Matched
.
Для совместимости во всех awk
реализациях.
awk 'FNR==NR{seen[$0];next} ($0 in seen){delete seen[$0]};
END{for(x in seen);print (!x)?"Matched":"Not Matched"}' file2 file1
Чтобы игнорировать пустые строки / или строки с пробелами только в случае file2 , вам необходимо добавить NF
условие в, NR==FNR && NF {...
чтобы пропустить чтение их в массив.
file2
содержит 2 строкиA
, нужноfile1
ли содержать как минимум 2 строкиA
?