| 9 | 1/1 | 返回列表 |
| 查看: 1486 | 回復(fù): 8 | ||
xiezhancnu木蟲 (小有名氣)
|
[求助]
perl程序求大神加以修改~~
|
|
現(xiàn)在有個(gè)文件夾TOTAL,該文件夾內(nèi)有兩個(gè)文件分別是a.txt和b.txt(見附件),我現(xiàn)在想生成這樣的結(jié)果: 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 第二行空格的意思是因?yàn)镺s02t0242600-01在文件a.txt內(nèi)沒有對(duì)應(yīng)的相,所以就空著!我現(xiàn)在寫了一個(gè)程序,如下: @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"; } 生成的結(jié)果是這樣的: Os02t0249600-01 6236.420821 19861.20539 Os02t0242600-01 6550.062 Os03t0427300-01 7423.620595 26454.94742 Os01t0762500-00 5592.607026 31007.32272 也就是無法生成空格,第二行的6550.062應(yīng)該在19861.20539這一列,請(qǐng)大神在我的 程序的基礎(chǔ)上加以修改或者另寫程序以實(shí)現(xiàn)我想要的結(jié)果,謝謝了~~~ |
至尊木蟲 (著名寫手)
|
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; } } |
木蟲 (小有名氣)
|
有以個(gè)問題要問你? 你在處理這個(gè)事,最終是不是只有這兩文件? 如果是,解決辦法如下, 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”,用“-”表示缺失數(shù)據(jù) } |

木蟲 (小有名氣)
|
如果超過3個(gè)文件,解決方法如下, @gbk = glob('TOTAL/*'); my $hash; ##### 構(gòu)建一個(gè)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; #### 每一個(gè)文件一個(gè)值 } } 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"; } |

木蟲 (小有名氣)
木蟲 (小有名氣)
|
我寫了一個(gè)完整的perl腳本,具體見“parseFile.pl”(http://good.gd/2155638.htm),測(cè)試的結(jié)果見“結(jié)果.bmp”(http://good.gd/2155640.htm) "第二行空格的意思是因?yàn)镺s02t0242600-01在文件a.txt內(nèi)沒有對(duì)應(yīng)的相",你說a文件中沒有“Os02t0242600-01”這行,但是,其實(shí)是有的,見圖“文件a.bmp”(http://good.gd/2155643.htm)。 |

至尊木蟲 (著名寫手)
木蟲 (小有名氣)
木蟲 (小有名氣)
送鮮花一朵 |
你好,呵呵,我之前把文件弄錯(cuò)了,呵呵,a文件,b文件的名字弄顛倒了,呵呵,另外a、b文件只是測(cè)試文件,總共有七個(gè)文件的,呵呵,我還沒測(cè)試一下您的程序是否能跑通,送您鮮花一朵吧,呵呵,這樣的話生成結(jié)果是這樣的: Os02t0249600-01 6236.420821 19861.20539 Os02t0242600-01 6550.062 Os03t0427300-01 7423.620595 26454.94742 Os01t0762500-00 5592.607026 31007.32272 這樣也許您就不覺得奇怪了吧! |
| 9 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 08工科 320總分 求調(diào)劑 +11 | 梨花珞晚風(fēng) 2026-03-17 | 11/550 |
|
|---|---|---|---|---|
|
[考研] 一志愿華中農(nóng)業(yè)071010,總分320求調(diào)劑 +5 | 困困困困坤坤 2026-03-20 | 6/300 |
|
|
[考研] 尋找調(diào)劑 +4 | 倔強(qiáng)芒? 2026-03-21 | 4/200 |
|
|
[考研] 一志愿中南化學(xué)(0703)總分337求調(diào)劑 +9 | niko- 2026-03-19 | 10/500 |
|
|
[考研] 求調(diào)劑 +5 | Zhangbod 2026-03-21 | 7/350 |
|
|
[考研] 化學(xué)調(diào)劑 +5 | yzysaa 2026-03-21 | 5/250 |
|
|
[考研] 材料與化工(0856)304求B區(qū)調(diào)劑 +3 | 邱gl 2026-03-20 | 7/350 |
|
|
[考研] 0703化學(xué)調(diào)劑 +4 | 妮妮ninicgb 2026-03-21 | 4/200 |
|
|
[考研] 【考研調(diào)劑】化學(xué)專業(yè) 281分,一志愿四川大學(xué),誠心求調(diào)劑 +11 | 吃吃吃才有意義 2026-03-19 | 11/550 |
|
|
[考研] 302求調(diào)劑 +12 | 呼呼呼。。。。 2026-03-17 | 12/600 |
|
|
[考研] 336求調(diào)劑 +5 | rmc8866 2026-03-21 | 5/250 |
|
|
[考研] 268求調(diào)劑 +9 | 簡單點(diǎn)0 2026-03-17 | 9/450 |
|
|
[考研] 279求調(diào)劑 +5 | 紅衣隱官 2026-03-21 | 5/250 |
|
|
[考研] 一志愿山大07化學(xué) 332分 四六級(jí)已過 本科山東雙非 求調(diào)劑! +3 | 不想理你 2026-03-16 | 3/150 |
|
|
[考研] 332求調(diào)劑 +4 | ydfyh 2026-03-17 | 4/200 |
|
|
[考研] 265求調(diào)劑 +9 | 梁梁校校 2026-03-17 | 9/450 |
|
|
[考研] 一志愿蘇州大學(xué)材料求調(diào)劑,總分315(英一) +5 | sbdksD 2026-03-19 | 5/250 |
|
|
[考研]
|
簡木ChuFront 2026-03-19 | 8/400 |
|
|
[考研] 一志愿西安交通大學(xué) 學(xué)碩 354求調(diào)劑211或者雙一流 +3 | 我想要讀研究生 2026-03-20 | 3/150 |
|
|
[考研] 一志愿福大288有機(jī)化學(xué),求調(diào)劑 +3 | 小木蟲200408204 2026-03-18 | 3/150 |
|