Найдите строки в одном файле, которых нет в другом в Bash

Чтобы вернуть строки из одного файла, которых нет в другом файле, вы можете использовать различные методы в 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, и печатает ее, если это правда.