我有一个包含多种病毒基因组序列的 fasta 文件。
例子:
>gi_138375030_Human_papillomavirus
GAAAGTTTCAATCATACTTTATTATATTGGGAGTAAAAAAAA...
>gi_94481944_Human_herpesvirus_3
GGCCCAGCCCTCTCGCGGCCCCCTCGAGAGAGAAAAAAA...
我只想提取疱疹病毒条目,包括实际序列,它(在此文件中)始终是描述后面的行。
以下正则表达式有效:
>.*herpes.*\n.*\n
它选择描述和序列行。
我发现了类似的问题,但都使用了“书签行”功能: 将 Textpad 或 Notepad++ 中的所有正则表达式匹配导出为列表
但是,这只会为正则表达式输出的第一行添加书签,因此我无法使用所描述的解决方案。如果我使用“在当前文档中查找所有内容”,它也只会列出前几行。
我只想将正则表达式的输出复制到一个新文件中。这尤其令人沮丧,因为它只找到了一百多个条目,而这刚好超出了我愿意手动完成的界限。
我更喜欢 Windows 操作系统的解决方案。
答案1
您可以复制该文件,然后在副本中搜索并替换否定你想要的:
(?!>.*herpes.*)^(>.*\R)([ATGC]+\R)
上述方法将(或应该)找到成对的线,没有疱疹将其与空白替换字段结合起来,您将得到一个仅包含您要查找的内容的文件。
答案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
或从磁盘重新加载文件(另一个主菜单项)并尝试再次录制可以工作的宏。
然后:
- 运行宏至文件末尾。
- 现在您可以复制已加书签的行或删除未加书签的行...
答案3
不是 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
。您可以在快速启动/应用程序栏或桌面上创建该脚本的快捷方式。
答案4
我使用了以下解决方案:
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
在 bash shell 中
即使序列在多行中跟在标题后面,正则表达式也能正常工作。在第二个示例中,您最终会得到一个新文件。