Perl 使用.fasta文件计算序列的相对内容

Perl 使用.fasta文件计算序列的相对内容,perl,sequence,frequency,fasta,Perl,Sequence,Frequency,Fasta,因此,我作为“noob”,最近才被介绍通过Perl编程,我仍然习惯于所有这些。我有一个.fasta文件,我必须使用它,尽管我不确定我是否能够打开它,或者说我是否必须“盲目地”使用它 总之,我的文件包含了三个基因的DNA序列,是用这个.fasta格式写的 显然是这样的: >label sequence >label sequence >label sequence 我的目标是写一个脚本来打开和读取这个文件,我现在已经掌握了窍门,但是我必须读取每个序列,计算每个序列中“G”和“C

因此,我作为“noob”,最近才被介绍通过Perl编程,我仍然习惯于所有这些。我有一个.fasta文件,我必须使用它,尽管我不确定我是否能够打开它,或者说我是否必须“盲目地”使用它

总之,我的文件包含了三个基因的DNA序列,是用这个.fasta格式写的

显然是这样的:

>label
sequence
>label
sequence
>label
sequence
我的目标是写一个脚本来打开和读取这个文件,我现在已经掌握了窍门,但是我必须读取每个序列,计算每个序列中“G”和“C”的相对数量,然后我要将它写入一个以制表符分隔的文件——基因的名称,以及它们各自的“G”和“C”内容

有人能提供一些指导吗?我不确定什么是制表符分隔的文件,我仍在试图找出如何打开.fasta文件以实际查看内容。到目前为止,我使用的是.txt文件,可以轻松打开,但不能打开.fasta


我为听起来完全困惑而道歉。我很感激你的耐心。我可不像你们这些职业选手

我明白这很让人困惑,但你真的应该试着把你的问题限制在一个具体的问题上,明白吗

我不知道“.fasta”文件或“G”和“C”是什么。。但这可能并不重要

一般来说:

  • 打开输入文件

  • 读取和解析数据。如果它的格式很奇怪,您无法解析,那么可以继续寻找一个模块来读取它。如果你幸运的话,有人已经帮你完成了困难的部分

  • 计算你想计算的东西

  • 打印到屏幕(标准输出)或其他文件


“制表符分隔符”文件是一个包含列的文件(想想Excel),其中每列由制表符(“\t”)字符分隔。正如谷歌或stackoverflow搜索所告诉你的那样

这里是一种使用“awk”实用程序的方法,可以从命令行使用。通过指定其路径并使用
awk-f

#NR>1 means only look at lines above 1 because you said the sequence starts on line 2 
NR>1{
#this for-loop goes through all bases in the line and then performs operations below:
    for (i=1;i<=length;i++)
#for each position encountered, the variable "total" is increased by 1 for total bases        
       total++
    } 
    {
    for (i=1;i<=length;i++)
#if the "substring" i.e. position in a line == c or g upper or lower (some bases are
#lowercase in some fasta files), it will carry out the following instructions:
        if(substr($0,i,1)=="c" || substr($0,i,1)=="C")
#this increments the c count by one for every c or C encountered, the next if statement does
#the same thing for g and G:            
            c++; else
        if(substr($0,i,1)=="g" || substr($0,i,1)=="G")
            g++
    }
    END{
#this "END-block" prints the gene name and C, G content in percentage, separated by tabs       
        print "Gene name\tG content:\t"(100*g/total)"%\tC content:\t"(100*c/total)"%"
    }
#NR>1表示只查看1以上的行,因为您说过序列从第2行开始
NR>1{
#该for循环通过线路中的所有基座,然后执行以下操作:
对于(i=1;ifasta文件包含DNA(通常)序列。DNA序列使用4个字母A、C、T和G进行编码。在Perl中,用于处理生物数据的go-to库称为BioPerl: