0

我有下一个文件:

-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.

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

4

1 回答 1

0

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

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

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

List::Util 将有助于最大/最小

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.
}
于 2012-08-21T04:08:55.763 回答