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

如何使用带有awk语句的fasta头提取两种类型的序列,awk,Awk,我一直在运行一个名为genewise的程序,将核苷酸序列翻译成基因的蛋白质序列。输入包括来自许多样本的组装核苷酸序列。为了解析genewise输出,我一直在使用以下命令在fasta头上进行选择: for i in `ls`; do (cd "$i" && awk '/^>*/{flag=1;} /\/\// {flag=0}flag' out_genewise > out_genewise_prot.fa);done 我被要求为每个基因重新运行genewise,以便

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

for i in `ls`; do (cd "$i" && awk '/^>*/{flag=1;} /\/\// {flag=0}flag' out_genewise > out_genewise_prot.fa);done
我被要求为每个基因重新运行genewise,以便输出包括所有样本的翻译蛋白质序列和cDNA序列。我在创建两个awk语句来解析输出时遇到问题

对于基因的基因输出中的每个样本,蛋白质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
 //
下面是其中一个序列的示例

 >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

提前感谢您的帮助。

您的正则表达式设置不正确,这应该可以一次性创建两个文件

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

表示任何字符
*
表示0次或更多次<代码>/^>*.sp/将匹配“>xsp”或“xsp”,但不匹配“>xxsp”,其中x是任何字符(除>)

数据文件中标记提取结束的
/
在哪里?每个核苷酸序列或蛋白质序列以一个//”结尾。我已经更新了我原来的帖子,以便正确显示。@tkh86,请更清楚地添加预期输出,因为它不清楚。是的,我明白你的意思。非常感谢您的代码和解释。我要试一试。