Как проверить, какие строки из файла A отсутствуют в файле B, не отображая ничего, что присутствует в файле B, а не в файле A?

У меня есть текстовый файл, например sitelist1.txt (Файл A), который имеет некоторые URL-адреса, как показано ниже:

http://www.facebook.com http://www.twitter.com http://myspace.com/profile http://orkut.com/archived 

У меня есть другой текстовый файл, например sitelist2.txt (Файл B), который имеет множество существующих URL-адресов.

Я пытался:

 fgrep -v -f sitelist1.txt sitelist2.txt 

Проблема в том, что это также отображает URL-адреса, которые присутствуют в файле sitelist2.txt, а не в файле sitelist1.txt

3 Solutions collect form web for “Как проверить, какие строки из файла A отсутствуют в файле B, не отображая ничего, что присутствует в файле B, а не в файле A?”

-v вами-это делает его противоположным тому, что вы намереваетесь, – он показывает вам, для каждой строки в sitelist1.txt , все строки в sitelist2.txt , которые не совпадают. Значит, вы видите много дубликатов, я бы поспорил. Вы хотите использовать ту же команду без опции -v :

 fgrep -f sitelist1.txt sitelist2.txt 

Это выполнит следующую английскую директиву: для каждой строки в sitelist1.txt покажите мне все строки в sitelist2.txt которые содержат интересующую меня строку 1 строки, как всю строку или как часть строки файла 2.

Опция -v является опцией «инвертировать совпадение», которая показывает все несоответствующие строки.

Ответ Джона (помимо недоразумений, отмеченных в комментариях по этому вопросу), является ответом на вопрос, однако я хотел бы также указать, что для простых операций, подобных этому, combine (часть moreutils ) является хорошим выбором; он очень прост в использовании, поскольку позволяет выразить операцию, выполняемую с помощью логических операторов (AND, OR, NOT и XOR):

 combine sitelist1.txt NOT sitelist2.txt 
 % cat sitelist1.txt http://www.facebook.com http://www.twitter.com http://myspace.com/profile http://orkut.com/archived % cat sitelist2.txt http://www.facebook.com http://www.twitter.com http://myspace.com/profile % combine sitelist1.txt NOT sitelist2.txt http://orkut.com/archived 

В отличие от большинства утилит входные файлы не нужно сортировать (хотя я бы догадался, что они все еще отсортированы внутри), однако, как и при использовании fgrep в случае дубликатов строк в sitelist1.txt , t хотите напечатать. Если sitelist1.txt содержит повторяющиеся строки, и вы не хотите их печатать, вам нужно будет вывести вывод combine для sort -u :

 combine sitelist1.txt NOT sitelist2.txt | sort -u 

Если вы ищете полные URL-адреса в каждой строке, а не подстроки, вы можете использовать comm

comm -23 <(sort -u fileA) <(sort -u fileB)

Объяснение:
comm ожидает сортировку ввода, поэтому мы сначала сортируем и создаем уникальные файлы (sort -u file) .
Далее – используйте замену процесса для передачи вывода sort -u в качестве «файла» в comm, поскольку comm ожидает файлы: comm <() <() .
Last – подавление столбцов 2 (строки, уникальные для файла B) и 3 (линии, общие для обоих файлов) для вывода только строк в столбце 1 (строки, уникальные для файла A).

  • файлов больше среднего размера каталога?
  • bash script «Нет такого файла ...»
  • Выберите имя файла с наивысшим номером версии
  • переменная curl outfile не работает в скрипте bash
  • сценарий оболочки для управления количеством процессов пользователя
  • Расширение переменной в круглых скобках и котировках
  • Сценарий Bash для создания списка
  • YAD и Zenity - ввод времени начала / остановки для обрезания видео
  • Почему set -e не работает внутри () ||
  • Удалить строки из файла с разделителями табуляции с отсутствующими значениями
  • Как назначить {} переменной в find --exec
  • Interesting Posts

    ext3 Файловая система отображается в большинстве приложений, но только 77% заполнено до DF

    скрипт bash, вызывающий себя с разными аргументами

    простая команда «find» не работает

    Как установить этот скрипт как root в терминале: ./qt-opensource-linux-x64-5.3.2.run?

    Изменение темы Zsh в Android Studio

    Проверка каталога назначения после ошибки «Отсутствие пробела на устройстве»

    Используйте сетевой интерфейс для отправки данных в GNURadio

    Уведомление Dunst на CentOS

    Подключить символическую ссылку к программе или скрипту, который возвращает файл

    Установите USB-диск в Linux, который не был правильно удален в Windows

    Как вернуть сеанс SSH, который был запущен с опцией -f (выполняется в фоновом режиме)

    Понимание настроек Broadcom и файлов ядра

    Wget загружать файл (не перезаписывать) сценарий автоматического обновления

    Как перенаправить вывод wget в качестве ввода для распаковки?

    Ошибка монтирования файловой системы NTFS в Linux?

    Linux и Unix - лучшая ОС в мире.