Найти файлы, содержимое которых соответствует строке из текстового файла - PullRequest
1 голос
/ 06 апреля 2020

У меня есть текстовый файл - accessions.txt (ниже подмножество этого файла):

KRO94967.1
KRO95967.1
KRO96427.1
KRO94221.1
KRO94121.1
KRO94145.1
WP_088442850.1
WP_088252850.1
WP_088643726.1
WP_088739685.1
WP_088283155.1
WP_088939404.1

И у меня есть каталог с несколькими файлами (*.align).

Я хочу найти имена файлов (*.align), содержимое которых соответствует любой строке в моем текстовом файле accessions.txt.

Я знаю, что find . -exec grep -H 'STRING' {} + работает для поиска определенных c строк (например, замена STRING на WP_088939404.1 возвращает каждое имя файла, где присутствует строка WP_088939404.1).

Есть ли способ заменить STRING на "все строки в моем текстовом файле"?

Или

Есть ли другой (лучший) способ сделать это?

Я пытался не писать al oop, который читает содержимое всех моих файлов, так как их слишком много.

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

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вам нужна опция -f от grep.

find . -name '*.align' -exec grep -Fxqf accessions.txt {} \; -print
1 голос
/ 06 апреля 2020

grep может принимать список шаблонов для сопоставления с -f.

grep -lFf accessions.txt directory/*.align

-F говорит grep интерпретировать строки как фиксированные строки, а не шаблоны регулярных выражений.

Иногда -w также необходимо для предотвращения сопоставления внутренних слов, например,

abcd

может соответствовать не только abcd, но также xabcd или abcdy. Иногда предварительная обработка списка ввода необходима для предотвращения нежелательного соответствия, если правила более сложные.

...