首页 文章

如何使用带有awk语句的fasta头提取两种类型的序列

提问于
浏览
1

我一直在运行一个名为genewise的程序,将核苷酸序列翻译成基因的蛋白质序列 . 输入包括来自许多样品的组装的核苷酸序列 . 为了解析genewise输出,我一直在使用以下命令选择fasta标头:

for i in `ls`; do (cd "$i" && awk '/^>*/{flag=1;} /\/\// {flag=0}flag' out_genewise > out_genewise_prot.fa);done

我被要求对每个基因重新运行,以便输出包括翻译的蛋白质序列和所有样品的cDNA序列 . 我无法创建两个awk语句来解析输出 .

对于在genewise输出用于基因各样品,蛋白质FASTA报头具有在.sp.tr端部与核苷酸具有的.sp在可在两种序列之间进行区分的端部 .

以下是其中一个序列的示例 .

>303.1_assembled_PF3D7_1477500.[1:1643].sp.tr
 MNLRLSNYSLFQNILDKTNKSNCIYSTHSSYEEYHDEKVRTGSFFYSKKFRRYMLPIMGI
 LYIIILNLLHLKGILSTEVQRSYTFSRNLSDNEKEKEKEKENKEFYKCYKKKGIKKLTIE
 EEDLYPRHPGLYNSYYDYERPYLLTPEMLEYIEKAVEENVEKEVERRAIESFENRMLKQF
 VDEIRDKRLRKGTI
 //
 >303.1_assembled_PF3D7_1477500.[1:1643].sp
 ATGAATTTAAGGCTATCAAACTATAGTTTGTTTCAAAATATTCTTGATAAAACGAATAAA
 TCGAATTGTATTTATTCTACACACAGTTCTTACGAAGAATATCATGATGAAAAAGTAAGA
 GAAAAAGAAGTTGAAAGGAGAGCTATAGAATCATTTGAAAATAGAATGCTAAAACAGTTT
 GTAGATGAAATAAGAGATAAAAGATTAAGAAAAGGTACCATT
 //

我尝试了下面的命令来解析数据,但没有创建任何文件 . 有人可以帮我修理命令吗?

for i in `ls`; do (cd "$i" && awk '/^>*.sp.tr/{flag=1;} /\/\// {flag=0}flag' out_genewise > out_genewise_prot.fa);done

 for i in `ls`; do (cd "$i" && awk '/^>*.sp$/{flag=1;} /\/\// {flag=0}flag' out_genewise > out_genewise_nt.fa);done

在此先感谢您的帮助 .

1 回答

  • 2

    您的正则表达式未正确设置,这应该在一次传递中工作以创建两个文件

    $ awk '/^>.*sp\.tr$/ {suf="prot"} 
           /^>.*sp$/     {suf="nt"} 
           /\/\//        {suf=""} 
           suf           {print > FILENAME"_"suf".na"}' file
    

    . 表示任何char * 表示0次或更多次 . /^>*.sp/ 将匹配">xsp"或"xsp"但不">xxsp"其中x是任何字符(比>其他)

相关问题