我如何在一个哈希中插入一个列文件作为一个数组?

时间:2012-08-21 02:20:43

标签: arrays perl hash comparison

我有下一个文件:

-38     miRNA18 8       44      dvex109349      6618    6580
35      miRNA5  21      57      dvex110330      1917    1952
26      miRNA2  27      54      dvex110362      1092    1118
-30     miRNA43 60      90      dvex110558      464     434
30      miRNA2  31      63      dvex111097      1359    1389
-30     miRNA31 43      73      dvex111146      4337    4307
-29     miRNA32 32      63      dvex111322      5680    5651
35      miRNA43 60      95      dvex111435      5612    5647
-26     miRNA43 55      80      dvex111770      723     697
-39     miRNA43 21      58      dvex112127      4928    4889
-32     miRNA2  70      102     dvex112254      1554    1522
33      miRNA17 56      89      dvex113799      2985    3018
38      miRNA17 26      64      dvex113799      2985    3023
40      miRNA17 30      70      dvex113799      2985    3025

我需要将其插入到哈希中,但是使用这些参数:列5(dvex ####)必须是键,其他键将是此键的值。该想法是通过相等的键对其进行分组,并获得列6的较低值和列7的最大值。 我认为这很方便用键作为数组创建哈希,然后用这些参数组织它。

输出应为:

-38     miRNA18 8       44      dvex109349      6618    6618
35      miRNA5  21      57      dvex110330      1917    1952
-38     miRNA18 8       44      dvex109349      6618    6580
35      miRNA5  21      57      dvex110330      1917    1952
26      miRNA2  27      54      dvex110362      1092    1118
-30     miRNA43 60      90      dvex110558      464     434
30      miRNA2  31      63      dvex111097      1359    1389
-30     miRNA31 43      73      dvex111146      4337    4307
-29     miRNA32 32      63      dvex111322      5680    5651
35      miRNA43 60      95      dvex111435      5612    5647
-26     miRNA43 55      80      dvex111770      723     697
-39     miRNA43 21      58      dvex112127      4928    4889
-32     miRNA2  70      102     dvex112254      1554    1522
33      miRNA17 26      70      dvex113799      2985    3025 #note this result is a group.

我非常有趣,因为解决方案基于具有不同列的文件...

1 个答案:

答案 0 :(得分:0)

使用正则表达式或拆分提取列6(可能是6,7)到标量。

将该行存储到嵌套哈希中。

$data1{$v5}{$v6}=$_;
$data2{$v5}{$v7}=$_;

List :: Util将有助于max / min

use List::Util qw[min max];
foreach $v5 (sort keys %data) {
     $val6=min(keys $data1{$v5});
     $val7=max(keys $data2{$v5});
 now generate your output line as you desire.
}