如果名称行与另一个文件匹配,如何获取 fasta 序列

如果名称行与另一个文件匹配,如何获取 fasta 序列

我有一个包含多行标题的文件(文件 1),以及另一个包含 fasta 格式序列的文件(文件 2)。grep如果文件 1 中的标题行与文件 2 匹配,我想对序列进行 fasta 处理。

例子:

文件 1:

>sp|B7UM99|TIR_ECO27
>sp|P06616|ERA_ECOLI

文件 2:

>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
>sp|P0AD68|HUMAN
MKAAAKTQKPKRQEEHANFISWRFALLCGC
ILLALAFLLGRVAWLQVISPDMLVKEGDMR
SLRVQQVSTSRGMITDRSGRPLAVSVPVKA
IWADPKEVHDAGGISVGDRWKALANALNIP
.............

期望输出

>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............

答案1

好的,这是您想要执行的一个稍微复杂的 grep。过去,我用 Perl 编写了程序来执行此操作,但实际上有一个相当简单的 shell 用法可以执行此操作。首先,grep 不能进行多行匹配,因此我们需要一个可以执行此操作的类似 grep 的工具。pcregrep类似于 grep,但具有多行功能,如建议的那样堆栈溢出

sudo apt-get install pcregrep

为此,我们必须完成以下步骤。

1) 为 id 文件中的所有特殊字符添加转义符。

sed 's/[^a-zA-Z 0-9]/\\&/g' id_file.txt > search_file.txt

我从unix.com——shell 脚本

2)接下来,我们将搜索模式的其余部分添加到行尾。

sed -i 's/\>$/\$\[^\>\]\*/' search_file.txt

修改自堆栈交换炮弹黑客

3) 最后,我们可以使用此搜索文件作为 pcregrep 的输入,并使用 fasta 文件来选择我们想要的序列。

pcregrep -M -f search_file.txt sequences.fasta

正如@DavidForester 所说上一个问题但现在使用 pcregrep 进行多行匹配。

把所有这些放在一起;我们可以把所有事情都做成像这样(稍微复杂一点的)一行代码。

sed 's/[^a-zA-Z 0-9]/\\&/g' id_file.txt | sed 's/\>$/\$\[^\>\]\*/'| pcregrep -M -f /dev/stdin sequences.fasta

这样做的好处是不需要额外的文件。

简而言之,我们将输出通过管道传输到命令之间以获取正确的搜索字符串,然后pcregrep使用-f /dev/stdin标志将其传输到管道。我的测试表明,这会产生您请求的准确输出。我希望两年前我需要它时能够想出这个!

答案2

您可以通过循环内的简单 awk 命令来完成此操作:

$ while IFS= read -r tag; do
    # Execute the awk command with the current tag
    awk -v t="$tag" '/^>/{f=(t==$0)} f' fasta-1141936        
done < fasta-tags 

>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI

在哪里:

$ cat fasta-1141936 
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
>sp|P0AD68|HUMAN
MKAAAKTQKPKRQEEHANFISWRFALLCGC
ILLALAFLLGRVAWLQVISPDMLVKEGDMR
SLRVQQVSTSRGMITDRSGRPLAVSVPVKA
IWADPKEVHDAGGISVGDRWKALANALNIP

$ cat fasta-tags 
>sp|B7UM99|TIR_ECO27
>sp|P06616|ERA_ECOLI

相关内容