免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發新帖
查看: 40499 | 回復: 2
打印 上一主題 下一主題

關于Perl根據相同列合并N個文件的內容 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發表于 2019-01-05 14:31 |只看該作者 |倒序瀏覽
大家好,請教一個問題!望大家指點迷津...1.前提:在一個目錄下有N個文件(文件類型一致),且每一個文件中都有兩列,格式如下:
假設這是第一個文件的內容:
ID       value1
gene1  1
gene2  2
gene3  3
..
..
2.目的: 為了將這N個文件的內容根據相同ID(即第一列)合并在一起,最終格式是:
ID       value1 value2 .......valueN
gene1  1       2      ......        1
gene2  2       4      ......        10
gene3  3       6      ......        12
..        ..       ..      ......         ..
..        ..       ..      ......         ..

3.大體思路:是第一個文件和第二個文件比,第二個文件和第三個文件比,以此類推
for my $j(0 .. @files2-1){
        if(-e "$files2[$j]"){
                open my $input,$files2[$j] or (die "$!");
        while(<$input>){
            chomp;
            my($id1,$value1)=split/\t/;
            $hash{$id1}=$value1;
        }
    }
    if(-e "$files2[$j+1]"){
        open my $input2,$files2[$j+1] or (die "$!");
        while(<$input2>){
            chomp;
            my($id2,$value2)=(split/\t/,$_);
            if(exists ...){
                  print "$id2\t$hash{$id1}\t$value2\n"; 這個弊端就是只能得到兩列
            }

        }
}
該如何才能得到在前一輪輸出的列后面繼續呢!
謝謝大家了!

論壇徽章:
0
2 [報告]
發表于 2019-02-10 23:42 |只看該作者
本帖最后由 hztj2005 于 2019-02-14 20:47 編輯

這個代碼其實很簡單,對于每個文件,用哈希key讀出已有的value,把新文件的valueN拼接在后面,再寫回哈希表。
全部文件處理完畢,輸出哈希表就可以了。

論壇徽章:
0
3 [報告]
發表于 2020-01-13 21:51 |只看該作者
如果perl 這么復雜,那一定的是錯的。


3.大體思路:是第一個文件和第二個文件比,第二個文件和第三個文件比,以此類推
for my $j(0 .. @files2-1){
        if(-e "$files2[$j]"){
                open my $input,$files2[$j] or (die "$!");
        while(<$input>){
            chomp;
            my($id1,$value1)=split/\t/;
            $hash{$id1}=$value1;
        }
    }
    if(-e "$files2[$j+1]"){
        open my $input2,$files2[$j+1] or (die "$!");
        while(<$input2>){
            chomp;
            my($id2,$value2)=(split/\t/,$_);
            if(exists ...){
                  print "$id2\t$hash{$id1}\t$value2\n"; 這個弊端就是只能得到兩列
            }

        }
}
該如何才能得到在前一輪輸出的列后面繼續呢!
謝謝大家了!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則 發表回復

  

北京盛拓優訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP
   日韩综合区视频第一页导航,无码JK粉嫩小泬在线观看,午夜精品A片一区二区三区,日日躁夜夜躁狠狠躁麻豆,大胆国模,免费观看无遮挡www的网站