Баш, сравни файлы.Удаление значений из файла A, которые существуют в файле B - PullRequest
0 голосов
/ 29 июля 2010

Привет,

У меня есть один файл - более или менее файл серого списка.Мне нужно сравнить значения от 40 до 50 в нем с файлом белого списка - и удалить все значения из серого списка, который существует в файле белого списка.

Сейчас я беру каждое значение серого списка и сравниваю его с каждымзначение в файле белого списка (который имеет 1 - 2 тысячи значений) и удаление его из списка серых, если я найду совпадение.Затем переходите к следующему значению серого списка.

Кажется ужасно неэффективным - но я не уверен, с чего начать делать то, что я ищу.

Есть идеи?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 29 июля 2010

Вы можете использовать grep -f для этого.

grep -F -v -f whitelist.txt greylist.txt

Значения из greylist.txt, которых нет в whitelist.txt, находятся на стандартном выводе, вы можете перенаправить их в файл, если вам нужно.

Опции grep делают следующее:

  • -F: интерпретировать PATTERN как список фиксированных строк. (т.е. не используйте регулярные выражения)
  • -v: инвертировать смысл соответствия, чтобы выбрать несовпадающие строки.
  • -f: получение шаблонов из файла, по одному на строку.

См. man grep

1 голос
/ 29 июля 2010

Можете ли вы отсортировать любой файл? Это позволит вам досрочно завершить поиск, что значительно ускорит процесс, особенно если вы сможете отсортировать оба файла, и в этом случае вам придется обходить каждый файл только один раз (поскольку вы просто переходите к следующему файлу в настоящее время). при более низком значении).

...