全球Perl大師!Perl數據解析和插入行
我有一個這樣的文件來解析,並希望使......
從第一列中,ID,外顯子信息開始,開始位置,結束位置和方向。當ID遇到一個號碼時,ID增加1。
1 9239 712 8571 +
1 start_codon 712 714 +
1 stop_codon 8569 8571 +
2 3882 24137 24264 +
2 start_codon 24137 24139 +
3 3882 24322 24391 +
4 3882 24490 26064 +
4 stop_codon 26062 26064 +
5 4972 26704 26740 +
5 start_codon 26704 26706 +
6 4972 26814 27170 +
7 4972 27257 27978 +
7 stop_codon 27976 27978 +
8 10048 40161 41114 -
8 start_codon 41112 41114 -
8 stop_codon 40161 40163 -
9 272 43167 43629 -
9 stop_codon 43167 43169 -
10 272 43755 44059 -
10 start_codon 44057 44059 -
這樣....
1 9239 *712* *8571* +
1 start_codon 712 714 +
1 stop_codon 8569 8571 +
*X 9239 712 8571 +*
2 3882 *24137* 24264 +
2 start_codon 24137 24139 +
3 3882 24322 24391 +
4 3882 24490 *26064* +
4 stop_codon 26062 26064 +
*X 3882 24173 26064 +*
5 4972 *26704* 26740 +
5 start_codon 26704 26706 +
6 4972 26814 27170 +
7 4972 27257 *27978* +
7 stop_codon 27976 27978 +
*X 4972 26704 27978 +*
8 10048 *40161* *41114* -
8 start_codon 41112 41114 -
8 stop_codon 40161 40163 -
*X 10048 40161 41114 -*
9 272 *43167* 43629 -
9 stop_codon 43167 43169 -
10 272 43755 *44059* -
10 start_codon 44057 44059 -
*X 272 43167 44059 -*
每行開頭X已被添加,但用我的技術我不能...... :(
的事情是每一個外顯子第二列中的數字忽略了「start_codon」和「end_codon」,必須得到最小編號外顯子位置和最大編號外顯子位置之間星號*。
這是我的基本代碼來解析t他的數據...但我想,必須從頭 重新編碼(我不知道如何插入行'X')
(對不起,我刪除了代碼,因爲它不夠好並可能會造成混淆......)
Perl大師在世界上,你能幫我嗎?
謝謝!
AS TLP aked我把我的代碼放回去了。其尷尬的代碼雖然
use strict;
if (@ARGV != 1) {
print "Invalid arguments\n";
print "Usage: perl min_max.pl [exon_output_file]\n";
exit(0);
}
my $FILENAME = $ARGV[0];
my $exonid = 0;
my $exon = "";
my $startpos = 0;
my $endpos = 0;
my $strand = "";
my $min_pos = 0;
my $max_pos = 0;
open (DATA, $FILENAME);
while (my $line = <DATA>) {
chomp $line;
if ($line ne "") {
if ($line =~ /^(.+)\t(.+)\t(.+)\t(.+)\t(.+)/) {
$exonid = $1;
$exon = $2;
$startpos = $3;
$endpos = $4;
$strand = $5;
}
if ($exon =~ /\d+/) {
print $exonid,"\t",$exon,"\t",$startpos,"\t",$endpos,"\t",$strand,"\n";
} else {
print $exonid,"\t",$exon,"\t",$startpos,"\t",$endpos,"\t",$strand,"\n";
}
}
}
close (DATA);
exit;
我如何比較的最大值和最低值....
你沒有試圖存儲最小值/最大值的任何地方。這怎麼可能工作? – TLP
確切地說,我正在嘗試,但我不能,所以我只是把最基本的代碼開始,我刪除了所有不工作的部分。我仍在努力。這就是爲什麼上面的代碼非常簡單。感謝名單。 :( – Karyo
爲什麼'* X 10048 40161 41114 - *'不是'* X 10048 41112 41114 - *'8之後? –