Чтобы вернуть строки из одного файла, которых нет в другом файле, вы можете использовать различные методы в Bash. Вот несколько примеров:
Метод 1: использование команды grep
grep -vxFf file2.txt file1.txt
Объяснение:
- Опция
-f
используется для указания файла (file2.txt
), содержащего соответствующие шаблоны. - Опция
-v
инвертирует совпадение, поэтому печатаются строки, которых нет вfile2.txt
. - Опция
-x
соответствует всей строке. - Наконец, мы указываем
file1.txt
в качестве файла для поиска.
Способ 2: использование команды comm
comm -13 <(sort file1.txt) <(sort file2.txt)
Объяснение:
- Команда
comm
сравнивает два отсортированных файла построчно. - Опция
-13
подавляет строки, общие для обоих файлов, оставляя только строки, уникальные дляfile1.txt
. <(...)
— это подстановка процесса, позволяющая обрабатывать выходные данные командsort
как временные файлы.
Метод 3: использование awk
awk 'NR==FNR{a[$0];next} !($0 in a)' file2.txt file1.txt
Объяснение:
NR==FNR
— это условие, истинное только для первого файла (file2.txt
), позволяющее нам создать массивa
со строками изfile2.txt
.!($0 in a)
проверяет, отсутствует ли текущая строка в массивеa
, и печатает ее, если это правда.