首页 文章

根据 Headers 拆分多个fasta文件

提问于
浏览
-2

我是生物信息学的初学者,我正在尝试从多个fast-fasta文件创建子多个fasta文件 .

所以我有数百个包含fasta线的hundreads的fasta文件(带有 Headers 的序列) . 我想根据物种名称( Headers 中的指示)将这个fasta分成不同的新fasta文件 .

我有这样的文件:CL0073reads.fas

>>CL0073reads.fas_ang4836665r
TAGGCAGGCGTGGGGGTTTGT
>CL0073reads.fas_ang4864845r
CCTCTTCGGCCCTCA
>CL0073reads.fas_atl679495r
CAAGGACCGTTAGGGGC
>CL0073reads.fas_alb178305r
GCTGACGGCAACGTTAG

我想:CL0073reads_ang.fas

`>CL0073reads.fas_ang4836665r
TAGGCAGGCGTGGGGGTTTGT
>CL0073reads.fas_ang4864845r
CCTCTTCGGCCCTCA`

CL0073reads_atl.fas

`>CL0073reads.fas_atl679495r
CAAGGACCGTTAGGGGC`

CL0073reads_abl.fas

`>CL0073reads.fas_alb178305r
GCTGACGGCAACGTTAG`

我试图用脚本中的awk执行此操作,以便能够通过 for Fas in ${$(find *.fas)}; do awk script.awk<${Fas} 对我的多个文件执行此操作

我成功将我的序列转换为一行fasta .

我真的很感激帮助

2 回答

  • 1

    试试这个:

    find . -name '*.fas' -exec \
    awk -F'[>_.]' '
    NF>1 {
        close(out)
        out = $NF
        sub(/[0-9].*/,"",out)
        out = $2 "_" out ".out"
    }
    { print >> out }
    ' {} \;
    

    我为您的输出文件".out"添加了后缀,以便您可以将它们与".fas"输入文件分开 . 改变它以满足您的需求 . 您可以在 find 末尾使用 + 而不是 \; 来一次在多个文件上运行awk,以便在您使用GNU查找时加快速度,但如上所述,上述内容适用于任何POSIX工具 .

    以上使用FS(由-F设置)将以 > 开头的每一行拆分为相关部分,然后重新组合,然后形成该行的输出文件名以及下一行 > 行之后的所有内容 . 然后它只是将每一行打印到当前输出文件名 .

  • 1

    这是另一种看法,只使用“种类”作为文件名,因此应聚 Contract 一文件中的所有变体 .

    $ awk '/>/{close(fn); n=split($0,a,"_|[0-9]+"); fn=a[n-1]} {print >> fn}' file
    
    
    ==> alb <==
    >CL0073reads.fas_alb178305r
    GCTGACGGCAACGTTAG
    
    ==> ang <==
    >CL0073reads.fas_ang4836665r
    TAGGCAGGCGTGGGGGTTTGT
    >CL0073reads.fas_ang4864845r
    CCTCTTCGGCCCTCA
    
    ==> atl <==
    >CL0073reads.fas_atl679495r
    CAAGGACCGTTAGGGGC
    

    如果文件按名称排序并检查以前的名称,您可以最小化文件打开/关闭操作,但这更简单...

相关问题