| 查看: 1376 | 回复: 8 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
xiezhancnu木虫 (小有名气)
|
[求助]
perl程序求大神加以修改~~
|
|
|
现在有个文件夹TOTAL,该文件夹内有两个文件分别是a.txt和b.txt(见附件),我现在想生成这样的结果: a.txt b.txt(这一行可没有) Os02t0249600-01 6236.420821 19861.20539 Os02t0242600-01 6550.062 Os03t0427300-01 7423.620595 26454.94742 Os01t0762500-00 5592.607026 31007.32272 第二行空格的意思是因为Os02t0242600-01在文件a.txt内没有对应的相,所以就空着!我现在写了一个程序,如下: @gbk = glob('TOTAL/*'); for($n=0;$n<=@gbk;$n++){ open(input,"$gbk[$n]" ; while(my $line={ my @tmp=split("\t",$line); my $key = $tmp[0]; my $value = $tmp[4]; if (exists $hash{$key}){ $hash{$key} = $hash{$key}."\t".$value; }else{ $hash{$key} = $value; } } } delete $hash{GeneID}; while(my($key,$value)=each %hash){ print "$key\t$value\n"; } 生成的结果是这样的: Os02t0249600-01 6236.420821 19861.20539 Os02t0242600-01 6550.062 Os03t0427300-01 7423.620595 26454.94742 Os01t0762500-00 5592.607026 31007.32272 也就是无法生成空格,第二行的6550.062应该在19861.20539这一列,请大神在我的 程序的基础上加以修改或者另写程序以实现我想要的结果,谢谢了~~~ |
» 本帖附件资源列表
-
欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com - 附件 1 : a.txt
- 附件 2 : b.txt
2012-07-27 00:05:34, 740 bytes
2012-07-27 00:05:48, 562 bytes
» 猜你喜欢
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有7人回复
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有8人回复
申请2026年博士
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有5人回复
2025冷门绝学什么时候出结果
已经有7人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
磁性粒子团聚成这个样子了,求大神指点啊~~
已经有37人回复
急急急,,急求大神帮忙翻译一下,跪谢!!!
已经有2人回复
请帮忙编写一个perl程序处理文本
已经有26人回复
求大神帮我看下我这个方案
已经有10人回复
这个反应怎么操作,求做过此反应的大神指点
已经有11人回复
Perl 生物信息学编程求助,运行出现问题,烦请帮忙查找一下错误,谢谢!
已经有3人回复
求教一个origin中的问题,求大神指点
已经有4人回复
Perl 编程 请大神们帮忙!!!生物信息的牛人请进
已经有11人回复
matlab作业哪位大神麻烦给做一下,十万火急,周五之间要交
已经有3人回复
程序语言版拟开新子版“Shell&Perl&Python”
已经有10人回复
【求助】求高人帮我修改程序
已经有5人回复
wizardfan
至尊木虫 (著名写手)
- 应助: 599 (博士)
- 贵宾: 1.818
- 金币: 24624.2
- 散金: 197
- 红花: 48
- 沙发: 2
- 帖子: 2254
- 在线: 400.7小时
- 虫号: 1879241
- 注册: 2012-07-05
- 性别: GG
- 专业: 生物信息学
7楼2012-07-27 23:28:31
wizardfan
至尊木虫 (著名写手)
- 应助: 599 (博士)
- 贵宾: 1.818
- 金币: 24624.2
- 散金: 197
- 红花: 48
- 沙发: 2
- 帖子: 2254
- 在线: 400.7小时
- 虫号: 1879241
- 注册: 2012-07-05
- 性别: GG
- 专业: 生物信息学
【答案】应助回帖
★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2012-07-28 00:01:13
xiezhancnu: 金币+5 2012-08-11 09:35:09
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2012-07-28 00:01:13
xiezhancnu: 金币+5 2012-08-11 09:35:09
|
use strict; #use Data: umper;opendir DIR, "total"; my @files = readdir DIR; closedir DIR; my %hash; #store all data into a big hash foreach my $file(@files){ next unless ($file=~/\.txt$/);#only deal with text file &dealOneFile($file); } #print Dumper(%hash); #find the union set of all keys from all files my %key; my @doneFiles = keys %hash; @doneFiles = sort {$a cmp $b} @doneFiles;#sort the file namess foreach my $tmp(@doneFiles){ my %oneFile = %{$hash{$tmp}}; # print Dumper(%oneFile); foreach (keys %oneFile){ $key{$_}++ } } #print Dumper(%key); #print header $"="\t"; print "file\t@doneFiles\n"; #print content foreach my $key(keys %key){ print "$key"; foreach my $file(@doneFiles){ print "\t"; print "$hash{$file}{$key}" if (exists $hash{$file}{$key}); } print "\n"; } sub dealOneFile{ my $filename = "$_[0]"; open IN,"total/$filename"; while(my $line= chomp($line); my ($key,$a,$b,$c,$value) = split("\t",$line); $hash{$_[0]}{$key}=$value; } } |
2楼2012-07-27 03:12:23
zhusheng303
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 3137.3
- 帖子: 68
- 在线: 45.6小时
- 虫号: 880479
- 注册: 2009-10-22
- 性别: GG
- 专业: 生物信息学
【答案】应助回帖
感谢参与,应助指数 +1
|
有以个问题要问你? 你在处理这个事,最终是不是只有这两文件? 如果是,解决办法如下, while(my $line={ my @tmp=split("\t",$line); my $key = $tmp[0]; my $value = $tmp[4]; if (exists $hash{$key}){ $hash{$key} = $hash{$key}."\t".$value; }else{ $hash{$key} = “". "\t" .$value; ####或者写成 “$hash{$key} = “-". "\t" .$value”,用“-”表示缺失数据 } |

3楼2012-07-27 08:58:57
zhusheng303
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 3137.3
- 帖子: 68
- 在线: 45.6小时
- 虫号: 880479
- 注册: 2009-10-22
- 性别: GG
- 专业: 生物信息学
【答案】应助回帖
|
如果超过3个文件,解决方法如下, @gbk = glob('TOTAL/*'); my $hash; ##### 构建一个hash变量 for($n=0;$n<=@gbk;$n++){ open(input,"$gbk[$n]"; while(my $line={ my @tmp=split("\t",$line); my $key = $tmp[0]; my $value = $tmp[4]; next if($key eq "GeneID" ; #### 不记录“GeneID”这一行$hash->{$key}{$n} = $value; #### 每一个文件一个值 } } my $fileNum=$#gbk; foreach my $key (keys %{$hash}){ print "$key"; foreach my $i (0..$fileNum){ if(exists $hash->{$key}{$i}){ print "\t$$hash->{$key}{$i}"; }else{ print "\t"; } } print "\n"; } |

4楼2012-07-27 09:26:47













;
回复此楼
umper;