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

作者: 生信杂谈 | 来源:发表于2017-05-27 22:16 被阅读367次

前几天有个同事请教我安装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合并多个文本

    前几天有个同事请教我安装R的事,然后我甩给他一个R包让他自己去安装。最后因为服务器权限不足,没有安装成功。然后我问...

  • mha-manager管理节点检测脚本

    #!/usr/bin/env perl# Copyright (C) 2011 DeNA Co.,Ltd.## T...

  • 数据分析课程-【用数据说话-EXCEL的超实用宝典】

    数据导入 文本,设置文本分隔符和文本原始格式 数据拆分合并 拆分:分列,分隔符号、固定宽度 数据合并:使用数据合并...

  • #Perl# 给文本中的数字添加千分符

    日常做完生信分析后,我们会对某些数据进行统计并做成一份统计结果,而统计结果出现数字是再正常不过的。100,1000...

  • 详解Beyond Compare怎样快速修改内容

    Beyond Compare是一款好用的合并文本的工具,在使用Beyond Compare进行文本合并的同时,或多...

  • 简介

    perl擅长处理文本,其程序即源代码。perl程序也只是一个纯文本文件。一个最简单的perl程序 在执行前需要改一...

  • 2019-03-22

    FFmpeg使用filter_complex命令合并多个视频 我的csdn原文 filter_complex合并多...

  • Excel学习笔记13(未完)

    邮件合并 1.简单的邮件合并 -批量生成多个文档 word-邮件合并-信函-使用现有列表 -利用word发送邮件 ...

  • git常用命令

    提交代码规范 多个commit合并一个 每次合并master必须要保持commit干净。 使用临时分支 使用reb...

  • 使用Pandas合并多个表格

    大家好,我是小刘歌。介绍一个使用Pandas合并多个表格的程序。废话不多说,直接上代码。 使用 mamba ins...

网友评论

    本文标题:#perl#使用perl合并多个文本

    本文链接:https://www.haomeiwen.com/subject/twfcfxtx.html