我有下一个文件:
-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.
我很感兴趣,因为该解决方案基于一个具有不同列的文件。。。
使用正则表达式或将提取列6(可能还有6,7)拆分为标量。
将该行存储到嵌套哈希中。
$data1{$v5}{$v6}=$_;
$data2{$v5}{$v7}=$_;
列表::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.
}