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

时间:2012-03-15 09:28:30

标签: perl sequence frequency fasta

所以我是我的'noob',刚刚通过Perl介绍编程,我仍然习惯了所有这些。我有一个.fasta文件,我必须使用它,虽然我不确定我是否能够打开它,或者我是否必须“盲目地”使用它,可以这么说。

无论如何,我所拥有的文件包含三种基因的DNA序列,以.fasta格式编写。

显然它是这样的:

>label
sequence
>label
sequence
>label
sequence

我的目标是编写一个脚本来打开和读取我现在已经掌握的文件,但我必须阅读每个序列,计算每个序列中“G”和“C”的相对数量,以及那么我要把它写成TAB分隔文件中的基因名称,以及它们各自的'G'和'C'内容。

有人能提供一些指导吗?我不确定TAB分隔文件是什么,我仍在试图弄清楚如何打开.fasta文件来实际查看内容。到目前为止,我已经使用了.txt文件,我可以轻松打开,但不是.fasta。

我为完全不知所措的声音道歉。我很感激你的耐心。我不喜欢你那里的职业选手!!

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

我觉得这很令人困惑,但你真的应该尝试将你的问题限制为一个具体问题,请参阅https://stackoverflow.com/faq#questions

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

一般而言:

  • 打开输入文件

  • 读取和解析数据。如果它是一些你无法解析的奇怪格式,请在http://metacpan.org上搜索一个模块来读取它。如果你很幸运,有人已经为你做了很多困难。

  • 计算你想要计算的任何东西

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

“TAB-delimite”文件是一个带有列的文件(想想Excel),其中每列由制表符(“\ t”)字符分隔。快速google或stackoverflow搜索会告诉你..

答案 2 :(得分:0)

这是一种使用'awk'实用程序的方法,可以从命令行使用。通过指定路径并使用awk -f <path> <sequence file>

执行以下程序
#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)"%"
    }