我想将我的fasta文件子集化,以检索属于给定总体的序列。以下是我的文件示例。
>CLocus_12706_Sample_44_Locus_36326_Allele_0 [JoJo_s113.fq; groupI, 125578, +]
TGCAGCATGCTGGTGAACGCGTCATCATAAGCCTGTTGGCGAGCCAGCAGAAGGCGGCATGGGCAGCACTTAATAGGACGCACGTCCTCTGTGTCA
>CLocus_12706_Sample_46_Locus_34641_Allele_0 [JoJo_s115.fq; groupI, 125578, +]
>CLocus_12706_Sample_69_Locus_37751_Allele_0 [LakeCamp_s033.fq; groupI, 125578, +]
TGCAGCATGCTGGTGAACGCGTCATCATAAGCCTGTTGGCGAGCCAGCAGAAGGCGGCATGGGCAGCACTTAATAGGACGCACGTCCTCTGTGTCA
>CLocus_12706_Sample_70_Locus_33595_Allele_0 [LakeCamp_s034.fq; groupI, 125578, +]
TGCAGCATGCTGGTGAACGCGTCATCATAAGCCTGTTGGCGAGCCAGCAGAAGGCGGCATGGGCAGCACTTAATAGGACGCACGTCCTCTGTGTCA
>CLocus_72879_Sample_136_Locus_80036_Allele_0 [NaknekRiver_s148.fq; groupV, 11333693, -]
TGCAGAACGAGATGAGGACAAACACACTCACCACTCTGTGGACATGTAGACGGCTGGCCTGTCCTACCAAGGACAAATACTCCCACAACAGTCCAA
人口是id的一部分,包括例如“LakeCamp”或“JoJo”或“NaknekRiver”。
我试着按照这篇文章来弄清楚如何提取序列。 https://unix.stackexchange.com/questions/253499/extracting-subset-from-fasta-file
为此,我执行了以下操作,其中“JoJo”是这里的首选人口,输入文件为“fasta8c18subset.fa”。
awk -vrs=">" 'BEGIN{t["JoJo"]=1}{if($1 in t){printf ">%s",$0}}' fasta8c18subset.fa
我跑这个时没有收到错误,但我也没有输出。
作为输出,我想得到与该总体相关的整个标题和序列。所以,如果我试图提取“LakeCamp”样本,我希望输出文件包含以下内容
>CLocus_12706_Sample_69_Locus_37751_Allele_0 [LakeCamp_s033.fq; groupI, 125578, +]
TGCAGCATGCTGGTGAACGCGTCATCATAAGCCTGTTGGCGAGCCAGCAGAAGGCGGCATGGGCAGCACTTAATAGGACGCACGTCCTCTGTGTCA
>CLocus_12706_Sample_70_Locus_33595_Allele_0 [LakeCamp_s034.fq; groupI, 125578, +]
TGCAGCATGCTGGTGAACGCGTCATCATAAGCCTGTTGGCGAGCCAGCAGAAGGCGGCATGGGCAGCACTTAATAGGACGCACGTCCTCTGTGTCA
思想?
答案 0 :(得分:2)
我建议你使用一个可用的fasta格式解析器。
例如,在python3中,您可以使用来自pyGATB的非常高效的解析器。
您可以按如下方式使用它:
dict
使用您的示例文件运行它(奇怪的是#!/usr/bin/env python3
import sys
from gatb import Bank
fasta_file = sys.argv[1]
pop_name = sys.argv[2]
def get_pop(header):
"""Extracts the population name from the fasta header."""
return header.decode("utf-8").split(" ")[1].split("_")[0][1:]
for seq in Bank(fasta_file):
if get_pop(seq.comment) == pop_name:
print(">%s\n%s" % (
seq.comment.decode("utf-8"),
seq.sequence.decode("utf-8")))
sys.exit(0)
的空序列):
CLocus_12706_Sample_46_Locus_34641_Allele_0 [JoJo_s115.fq; groupI, 125578, +]
如果您没有python3,可以使用Biopython的./extract_pop.py test.fa "JoJo"
>CLocus_12706_Sample_44_Locus_36326_Allele_0 [JoJo_s113.fq; groupI, 125578, +]
TGCAGCATGCTGGTGAACGCGTCATCATAAGCCTGTTGGCGAGCCAGCAGAAGGCGGCATGGGCAGCACTTAATAGGACGCACGTCCTCTGTGTCA
>CLocus_12706_Sample_46_Locus_34641_Allele_0 [JoJo_s115.fq; groupI, 125578, +]
模块:
SeqIO