- 论坛徽章:
- 0
|
本帖最后由 弦断有谁听1053476508 于 2014-12-15 16:53 编辑
任务:步骤1,Orthologs-msu.txt是原始文件,让其每一行行生成1个ID文件(如ORTHOMCL2.txt) ,文件名是每一行第一个元素。
步骤2,然后以文件名为散列的key,文件内容为元素构造散列保存。
步骤3,再用每个ID文件的每一行(如下面的APK_ORTHOMCL2),从同一个Allseq.fa(DNA文件)中找到对应的APK_ORTHOMCL2提取DNA序列
如,APK_ORTHOMCL2
>AT1G51370.2 | Symbols: | F-box/RNI-like/FBD-like domains-containing protein | chr1:19045615-19046825 FORWARD LENGTH=1118
ATGGTGGGTGGCAAGAAGAAAACCAAGATATGTGACAAAGTGTCACATGAGGAAGATAGGATAAGCCAGTTACCGGAACC
TTTGATATCTGAAATACTTTTTCATCTTTCTACCAAGGACTCTGTCAGAACAAGCGCTTTGTCTACCAAATGGAGATATC
TTTGGCAATCGGTTCCTGGATTGGACTTAGACCCCTACGCATCCTCAAATACCAATACAATTGTGAGTTTTGTTGAAAGT
TTTTTTGATTCCCACAGGGATTCATGGATACGCAAACTCCGTTTAGATTTGGGTTATCATCATGATAAGTATGATCTCAT
GTCATGGATTGATGCTGCGACTACGCGTAGGATTCAGCATCTTGATGTTCATTGTTTTCACGATAATAAGATACCCTTGA
GCATATATACATGCACGACGTTGGTACACTTACGACTCCGTTGGGCTGTCTTGACTAATCCCGAGTTTGTTTCCTTACCT
生成N个fa序列文件,找不到对应ID的生产空文件。
原始文件就像下面的内容:
orthologous_group_ID num_orthologs/in-paralogs num_species species orthologs/in-paralogs
APK_ORTHOMCL0 416 2 rice sorghum LOC_Os04g04140 LOC_Os05g29160 LOC_Os10g02640
APK_ORTHOMCL2 212 3 brachy rice sorghum Bradi1g21530 Bradi2g26540 Bradi2g49480 Bradi2g61260
其中要求生成的ID文件如下:
APK_ORTHOMCL0
416
2
rice sorghum
LOC_Os04g04140
LOC_Os05g29160
LOC_Os10g02640
别人写的步骤一的一段代码,错误出在哪,怎么改?或者高手给重写一段。
open (IN,"<$ARGV[0]");
my ($i,@in,$linename,@id);
while (<IN>)
{
@in = split("\s", $_);
$linename = shift (@in);
@id = join ("\n", @in);
print "$linename\n@id";
$i++;
open my $out, ">$i";
print $out sth
步骤二没有参考脚本
步骤三的参考脚本如下:
#tempo 从fasta格式中用名称提取序列
#cd C:\strawberry\perl\bin
# perl ID-SEQok.pl ORTHOMCL2.txt zmossbat.fa >mcl2.fa
#!/usr/bin/perl -w
#use strict;
#use warnings;
($ARGV[0] && $ARGV[1]) or die "usage: $0 NameFile DataBase\nShortName to FullName\n";
my $nameFile=$ARGV[0];
my $dataFile=$ARGV[1];
open(my $nf,$nameFile) or die "cannot open $nameFile";
open(my $df,$dataFile) or die "cannot open $dataFile";
undef $/;
my $temp;
$temp=<$nf>;
my @names=sort split /\n/,$temp;
close($nf);
foreach my $name (@names)
{
$name=~s/\|/\\|/g;
}
$/=">";
while($temp=<$df>)
{
chomp($temp);
$temp=~m/(.*)/;
my $head=$1;
foreach my $name(@names)
{
if($head=~m/$name/i)
{
print ">$temp";
}
}
}
close($df);
我是植物学硕士,但是对计算机语言没什么造诣,高手帮帮忙吧,最好把三个步骤连在一起写一个程序。
---------------------------------------------------------------------------------------------------------------------------------------------------------
12月15编辑:
原始文件(Orthologs-msu.txt有约2000行)和要求生成约2000个fa序列文件,过程如
Allseq.fa文件有200g,太大没法上传,只能发测试文件。测试文件在下面的附件中,具体测试就是使原始文件Orthologs-msu.txt每一行生成1个ID文件,文件名是每一行第一个元素,文件内容为ID。ID文件的每一行为一个子ID(如ORTHOMCL2.txt),再用每个ID文件的每一行(如下面的LOC_Os04g04140),从同一个Allseq.fa(DNA文件)中找到对应的(如LOC_Os04g04140)提取序列,生成N个fa序列文件。效果如APK_ORTHOMCL0.fa和APK_ORTHOMCL2.fa,提取不到对应序列的如APK_ORTHOMCL1.fa为空!
测试文件(12月15).zip
(17.53 KB, 下载次数: 4)
|
|