Сравните строки двух файлов, выведите строки, уникальные для первого файла

У меня есть два текстовых файла, которые содержат уникальный отсортированный список слов:

Файл 1:

a
b
c
d

Файл 2:

b
c

Мне нужен новый файл, который содержит только посторонние строки в файле 1, поэтому результат будет

a
d

Ответ 1

Это то, что comm для:

comm - выберите или отклоните линии, общие для двух файлов

Вы хотите

comm -23 "File 1" "File 2"

который будет подавлять вывод строк только в файле 2 и строки в обоих файлах, оставляя только строки в файле 1. Дополнительные ответы здесь, на вики Грега Wooledge

Ответ 2

Вы можете использовать grep:

grep -f file1.txt -vFx file2.txt

Обратите внимание на использование флагов F, --fixed-strings и x, --line-regexp, чтобы заставить сравнение выполнить всю строку.

Ответ 3

Попробуйте это

$ join file1.txt file2.txt -v 1

$ man join

-a FILENUM
   print unpairable lines coming from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2
-v FILENUM
   like -a FILENUM, but suppress joined output lines