我有下一个文件:
-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.
我非常有趣,因为解决方案基于具有不同列的文件...
答案 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.
}