Intereting Posts
Автоматический монтаж ecryptfs работает только после клонирования Удаление дисков с большим количеством крошечных файлов на Lustre Shellshock: почему эта ошибка при тестировании на уязвимость CentOS Запуск процесса не реагирует на сигналы kill, а не переключается по контексту убивать или удалять всех клиентов из работающего vncserver без перезапуска сервера Редактирование nsswitch.conf для проверки файлов, отличных от / etc / passwd, при поиске локальных файлов для деталей пользователя Получение отдельных байтов из двоичного файла в переменную с bash Проверить количество слов в файле, содержащем конкретную букву Я изменил свое имя хоста, перезагрузил и потерял интернет-соединение Как повернуть данные по awk в сценарии оболочки unix? Arch Linux Ethernet для Wi-Fi-моста Переменные окружения для пакетов, построенных в настраиваемом местоположении Есть ли установленный по умолчанию ftp-сервер в установке Debian Wheezy по умолчанию? SOLVED Не удается обнаружить второй монитор DVI Debian Jessie Интернет, не работающий на Puppy 6.3 64-битная ОС, использующая фрисби-телефонную связь pppoe

Grep для поиска шаблона в файле

Я хочу использовать grep для поиска шаблона из одного файла во втором. Мой файл шаблонов выглядит примерно так:

 K02217 K07448 KO8980 

Файл для поиска:

 >aai:AARI_24510 proP; proline/betaine transporter; K03762 MFS transporter, MHS family, proline/betaine transporter >aai:AARI_26600 ferritin-like protein; K02217 ferritin [EC:1.16.3.1] >aai:AARI_28260 hypothetical protein >aai:AARI_29060 ABC drug resistance transporter, inner membrane subunit; K09686 antibiotic transport system permease protein >aai:AARI_29070 ABC drug resistance transporter, ATP-binding subunit (EC:3.6.3.-); K09687 antibiotic transport system ATP-binding protein >aai:AARI_29650 hypothetical protein >aai:AARI_32480 iron-siderophore ABC transporter ATP-binding subunit (EC:3.6.3.-); K02013 iron complex transport system ATP-binding protein [EC:3.6.3.34] >aai:AARI_33320 mrr; restriction system protein Mrr; K07448 restriction system protein 

Команда, которую я пробовал:

 fgrep --file=pattern.txt file.txt >> output.txt 

Это печатает строки file.txt, где шаблон найден. Мне нужно, чтобы он напечатал также столбец с найденным шаблоном. Итак, что-то вроде:

 K07448 mrr; restriction system protein Mrr; K07448 restriction system K02217 ferritin-like protein; K02217 ferritin [EC:1.16.3.1] 

Кто-нибудь может предложить мне, как это сделать?

Вы можете использовать цикл оболочки:

 $ while read pat; do grep "$pat" file | while read match do echo -e "$pat\t$match" done done < patterns KO3435 Xxxxx KO3435;folding factor KO3435 Yyyyy KO3435,xxxx KO3322 proteinaseK (KO3322) 

Я протестировал это, выполнив это на плоском файле UniProt для человека (625M) и используя 1000 UniProt ID в качестве шаблонов. Потребовалось ~ 6 минут на моем ноутбуке Pentium i7. Потребовалось ~ 35 секунд, когда я искал только 100 моделей.


Как указано в комментариях ниже, вы можете сделать это немного быстрее, пропуская echo и используя grep --label и -H options:

 $ while read pat; do grep "$pat" --label="$pat" -H < file done < patterns 

Запуск этого в ваших файлах примеров приводит к:

 $ while read pat; do grep "$pat" --label="$pat" -H < kegg.annotations; done < allKO.IDs.txt > test1 terdon@oregano foo $ cat test1 K02217:>aai:AARI_26600 ferritin-like protein; K02217 ferritin [EC:1.16.3.1] K07448:>aai:AARI_33320 mrr; restriction system protein Mrr; K07448 restriction system protein 

Если вы не возражаете против дополнительного столбца с номером в нем, вы можете использовать join и grep для этого.

 $ join <(grep -of patterns.txt file.txt | nl) \ <(grep -f patterns.txt file.txt | nl) 1 KO3322 proteinaseK (KO3322) 2 KO3435 Xxxxx KO3435;folding factor 3 KO3435 Yyyyy KO3435,xxxx 

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

 $ ack "$(tr '\n' '|' < pattern.txt | sed -e 's/.$//')" --print0 --output='$& $_' file.txt KO3322 proteinaseK (KO3322) KO3435 Xxxxx KO3435;folding factor KO3435 Yyyyy KO3435,xxxx