2

У меня есть файл fasta, содержащий последовательности генома нескольких вирусов.

Пример:

>gi_138375030_Human_papillomavirus
GAAAGTTTCAATCATACTTTATTATATTGGGAGTAAAAAAAA...

>gi_94481944_Human_herpesvirus_3
GGCCCAGCCCTCTCGCGGCCCCCTCGAGAGAGAAAAAAA...

Я хочу извлечь только записи вируса герпеса, включая фактическую последовательность, которая (в этом файле) всегда является строкой после описания.

Следующее регулярное выражение работает:

>.*herpes.*\n.*\n

Он выбирает описание и последовательность строк.

Я нашел похожие вопросы, но все используют функцию "линия закладки":экспортировать все совпадения регулярных выражений в Textpad или Notepad++ в виде списка

Однако это только закладка первой строки вывода регулярного выражения, поэтому я не могу использовать описанные решения. Если я использую "найти все в текущем документе", он также перечисляет только первые строки.

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

Я бы предпочел решение в ОС Windows.

4 ответа4

2

Вы можете попытаться объединить поиск RegEx с макросом (стандартные ярлыки Npp):

  • Убедитесь, что в конце файла есть пустая строка - это полезно при использовании Run macro to end of file главном меню файла .
  • Поиск (Ctrl+f) для вашей последовательности >.*herpes.*\n.*\n - не разрешать начинать перенос по файлу.
  • Перейти к началу файла (Ctrl+Home).
  • Поиск снова (F3).
  • Начать запись макроса (Ctrl+Shift+r).
  • Перейти к началу строки (Home) - вы должны быть в начале первой строки последовательности.
  • Строка закладки (Ctrl+F2).
  • Переместите курсор в конец второй строки (Down а затем End).
  • Добавьте в закладки другую строку (Ctrl+F2).
  • Поиск снова (F3).
  • Остановить запись макроса (Ctrl+Shift+r).

Теперь у вас должен быть рабочий макрос. Вы можете проверить это, играя в нее (Ctrl+Shift+p). Если что-то пойдет не так, вы можете отменить Ctrl+z или перезагрузить файл с диска (другой пункт главного меню) и попытаться снова записать рабочий макрос.

Затем:

  • Запустите макрос до конца файла.
  • Теперь вы можете копировать строки с закладками или удалять строки без закладок и ...
2

Вы можете сделать копию файла, а затем выполнить поиск и заменить отрицание того, что вы хотите:

(?!>.*herpes.*)^(>.*\R)([ATGC]+\R)

Выше будет (или должен) найти парные линии, которые не имеют герпеса. Соедините это с пустым полем замены, и вы получите файл, содержащий только то, что вы ищете.

0

Я использовал следующие решения:

use regex ">.*herpes.*\n[\nAGCTN]*" in **EditPad lite** and use its "search>copy_matches" option

или используйте:

cat virus_all.fasta | pcregrep --buffer-size 1000000 -M ">.*herpes.*\n[\nAGCTN]*" > herpes1.fasta

в оболочке

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

0

Не решение Npp; в Windows PowerShell:

Select-String "herpes" viruses.fas -context 0, 2 | % { $_.Line ; $_.Context.PostContext } | clip

Более удобная пакетная версия:

@echo off
powershell "$what  = Read-Host String to search      ; "^
           "$where = Read-Host In which file         ; "^
           "Select-String $what $where -context 0, 2 | "^
           "%% { $_.Line ; $_.Context.PostContext }  | "^
           "clip"

Сохраните его с расширением .bat (например, «clipvir.bat») в той же папке, где у вас есть файлы .fas . Вы можете создать ярлык для скрипта на панели быстрого запуска / приложений или на рабочем столе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .