24小时热门版块排行榜    

查看: 353  |  回复: 1

philip890220

铜虫 (初入文坛)

[求助] perl程序求助~~

正如附件及图片所示,注意下一啊,gene那一列中的gene是有重复的,我的目的就是将重复出现的基因每列分别取平均值,最后输出一个文件!
就拿BRO1来说,他出现两次,第二列中的两个数字分别是0.0375155和0.0691334,九曲他俩的平均值,第三列亦然~~,最后的输出结果应该是这样的:
GENE        GSM630089        GSM630090
BRO1               
COX11               
MET16               
SGO1               
YOR121C               
数字我省略了,反正就是有重复的取平均值,不重复的直接输出!,求助~~~       
谢谢喽~~~PS:实际处理的文件较大,附件中仅是例子~~~

1.gif

[ Last edited by philip890220 on 2012-9-25 at 16:48 ]
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : test.txt
  • 2012-09-25 16:32:22, 256 bytes

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jackie1179

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
philip890220: 金币+10, ★★★很有帮助, good~~ 2012-09-29 00:34:55
这个应该可以解决你的问题,输出文件为output.txt
CODE:
#!/usr/bin/perl

use warnings;
use strict;

my $in = "test.txt";

open IN,"<",$in || die "Cannot open this file!$!";
my %array;

;
while() {
  chomp;
  if(/^(\S+)\s+(\S+)\s+(\S+)/) {
    push @{$array{$1}{'col2'}},$2;
    push @{$array{$1}{'col3'}},$3;
  }
}

close IN;

foreach my $key(sort keys %array) {
  my $cnt = scalar(@{$array{$key}{'col2'}});
  foreach (@{$array{$key}{'col2'}}) {
    $array{$key}{'ave2'} += $_;     
  }
  
  $array{$key}{'ave2'} /= $cnt;

  foreach (@{$array{$key}{'col3'}}) {
    $array{$key}{'ave3'} += $_;
  }
  $array{$key}{'ave3'} /= $cnt;

}

my $out = "output.txt";
open OUT,">",$out || die "Cannot write to this file!$!";
foreach my $key(sort keys %array) {
  print OUT "$key\t$array{$key}{'ave2'}\t$array{$key}{'ave3'}\n";

}

close OUT;

exit(0);

2楼2012-09-27 10:00:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 philip890220 的主题更新
信息提示
请填处理意见