#Perl#使用perl合并多个文本

Posted 生信杂谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#Perl#使用perl合并多个文本相关的知识,希望对你有一定的参考价值。

前几天有个同事请教我安装R的事,然后我甩给他一个R包让他自己去安装。最后因为服务器权限不足,没有安装成功。然后我问了一下是需要什么功能,原来是需要将几个文件整合到一起,我一想,这个perl不就可以解决了。接下来我要安利一下perl强大的文本处理能力了。

首先,假设我有很多个文件,格式如下:

现在我需要整合这几个文件,最终格式如下:

0和1分别表示在对应文件中存在与否(当然也可以是对应文件中的表达值)。

大家第一时间肯定会想到用哈希表,给每个文件设置一个哈希?这个太傻了,而且如果文件很多,那可怎么办….那么用数组,但是数组怎么区分每一行呢?说到这里,可能大家都知道了,没错,用哈希数组。

大概思路是这样的,每当第i个文件的某一行时,检测是否有name对应的哈希key,如果没有,设置以这个name为哈希key的哈希数组为0数组。然后将这个数组的第i个值设置为1就好了。

闲话少说,看代码:

use warnings;
use strict;
my %hash=();
my @tmp=(0)
x@ARGV;
for(my $i=0;$i<@ARGV;$i++){    
   open IN,$ARGV[$i];      
   while(<IN>){    
   chomp;    
   my @sArr=split(/\t/,$_);    
    unless(exists $hash{$sArr[0]}){            @{$hash{$sArr[0]}}=@tmp;     }$hash{$sArr[0]}[$i]=1; }close IN; }
    foreach my $key(keys %hash){
    print join("\t",$key,@{$hash{$key}})."\n";
}

是不是很简单,我一般涉及到文本处理是先用perl处理好,之后再用R进行其它计算或者画图就可以了。


更多原创精彩内容敬请关注生信杂谈:


以上是关于#Perl#使用perl合并多个文本的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将 C 代码片段编译到我的 Perl 模块?

perl 大文本词频统计.

Perl:在多个文本文件中查找和替换特定字符串

Perl Apache:Perl 脚本显示为纯文本

将两个 if 语句合并为一个的 Perl 单行器

从 Word 中的表格中提取原始数据?使用 Perl