сравнить два файла, получить идентичный список

file1.txt (50 строк)

TERYUFV00000010753 TERYUFV00000009526 

file2.txt (500 строк)

 TERYUFV00000009526 refids_739_known_8/10_target TERYUFV00000018907 refids_12023_known_21/22_target TERYUFV00000010753 refids_11775_known_1/1_target 

output.txt

 TERYUFV00000010753 refids_11775_known_1/1_target TERYUFV00000009526 refids_739_known_8/10_target 

Сравните file1.txt (имеет 50 строк) с file2.txt (имеет 500 строк), получите список из файла file2.txt, который идентичен файлу file1.txt.

Я попробовал как команду join & fgrep, так и выдает пустой файл

6 Solutions collect form web for “сравнить два файла, получить идентичный список”

fgrep -f file1.txt file2.txt

Здесь мы получаем шаблон поиска из файла file1.txt и просматриваем его в файле file2.txt. Поскольку текст исправлен, мы используем fgrep для более быстрой операции поиска.

введите описание изображения здесь

Когда вы используете join, записи в каждой строке похожи на «ячейки» в db, но их следует сортировать, чтобы вы могли попробовать,

 sort file1.txt > file1_t.txt sort file2.txt > file2_t.txt 

И затем присоединитесь

 $ join file1_t.txt file2_t.txt 

который даст вам внешнее соединение, то есть список всех вхождений ячеек в обоих файлах. Чтобы уменьшить этот список только на записи в обоих файлах, выполните вывод указанной выше команды в uniq

 $ join file1_t.txt file2_t.txt | uniq 

Перед тем, как join вам нужно sort .

 $ cat a.in TERYUFV00000010753 TERYUFV00000009526 $ cat b.in TERYUFV00000009526 refids_739_known_8/10_target TERYUFV00000018907 refids_12023_known_21/22_target TERYUFV00000010753 refids_11775_known_1/1_target $ join a.in b.in $ join <(sort a.in) <(sort b.in) TERYUFV00000009526 refids_739_known_8/10_target TERYUFV00000010753 refids_11775_known_1/1_target 

Предполагая, что ваши файлы отсортированы:

 comm -12 file1 file2 

Работает ли следующая строка?

 grep -iw -f file1.txt file2.txt 

Если файлы были загружены на сервер с клиента Windows, возможно, сначала вы должны запустить dos2unix.

 dos2unix file1.txt file2.txt 

Если вышеприведенные команды не работают, вы можете попробовать следующие строки, чтобы увидеть, есть ли лишние символы непечатания в начале или конце строк в файле file1.txt. Дополнительные непечатаемые символы в файлах file1.txt могут привести к ошибке grep из файла file2.txt.

 cat -v file1.txt sed -n -l file1.txt 

Вы также можете решить эту проблему с помощью AWK :

 NR == FNR { line[$1]; next; } $1 in line { print $0; } 

Как один вкладыш:

awk 'NR == FNR {line[$1]; next;} $1 in line' file1.txt file2.txt

Обязательно сохраните в памяти меньший файл, то есть поместите его в качестве первого аргумента одного лайнера.

  • Шаблон Regex для замены нескольких значений с помощью sed
  • Удаление прокомментированных строк в текстовом файле с помощью sed
  • Замените строки в файле на основе списка строк и списка соответствующих замещений
  • Почему * соответствует, где нет цифр?
  • Редактирование столбцов с помощью awk или sed. как напечатать следующий шаблон?
  • попытка добавить текст до и после некоторого текста
  • sed для удаления ведущего 91, если число равно 12 цифрам
  • Номер одной строки в каждом текстовом файле
  • Использование xargs для генерации ссылок
  • Как происходит модификация файла inplace в файле?
  • Используйте sed, чтобы удалить все, кроме определенного шаблона
  • Linux и Unix - лучшая ОС в мире.