所以我是我的'noob',刚刚通过Perl介绍编程,我仍然习惯了所有这些。我有一个.fasta文件,我必须使用它,虽然我不确定我是否能够打开它,或者我是否必须“盲目地”使用它,可以这么说。
无论如何,我所拥有的文件包含三种基因的DNA序列,以.fasta格式编写。
显然它是这样的:
>label
sequence
>label
sequence
>label
sequence
我的目标是编写一个脚本来打开和读取我现在已经掌握的文件,但我必须阅读每个序列,计算每个序列中“G”和“C”的相对数量,以及那么我要把它写成TAB分隔文件中的基因名称,以及它们各自的'G'和'C'内容。
有人能提供一些指导吗?我不确定TAB分隔文件是什么,我仍在试图弄清楚如何打开.fasta文件来实际查看内容。到目前为止,我已经使用了.txt文件,我可以轻松打开,但不是.fasta。
我为完全不知所措的声音道歉。我很感激你的耐心。我不喜欢你那里的职业选手!!
答案 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)"%"
}