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 に答える