- 论坛徽章:
- 8
|
本帖最后由 xiumu2280 于 2014-01-20 13:06 编辑
- #!/usr/bin/perl
- use strict;
- use warnings;
- use Data::Dumper;
- my %hash_gene = map {chomp;(split)[1,0]}<DATA>;
- open (IN,"C:\\Users\\Administrator\\Desktop\\test\\2014_1_18\\pearson_cor.txt");
- my %hash_new;
- while (<IN>) {
- chomp;
- my @data = split;
- map {my $key1 = $_;map {push @{$hash_new{$key1}},$_."_".$hash_gene{$_}}@data}@data if exists $hash_gene{$data[0]} && exists $hash_gene{$data[1]};
- }
- my @array_new;
- map {my %hash;
- my $key1 = $_;
- my @datayy;
- @hash{@{$hash_new{$key1}}}=1;
- map {%hash ~~ @{$hash_new{$_}} && push @datayy,$_}keys %hash_new;
- push @array_new,[@datayy];
- }keys %hash_new;
- my %hash_jon;
- map {my $line = $_;my $new = join "_",sort @$line;$hash_jon{$new}=1}@array_new;
- ############
- foreach my $key (keys %hash_jon) {
- my @data1 = split /_/,$key;
- my @data = sort {$a->[1] <=> $b->[1]}map {[$_,$hash_gene{$_}]}@data1;
- print "~~~~~~\n";
- ($data[1][1]-$data[0][1]) <= 3 && print "$data[0][0]\t$data[0][1]\n";
- map {@data[$_,$_+1] && ($data[$_+1][1]-$data[$_][1]) <= 3 && print "$data[$_+1][0]\t$data[$_+1][1]\n"}(0..$#data);
- }
- __DATA__
- 1 ENSG00000186891
- 2 ENSG00000186092
- 3 ENSG00000235249
- 4 ENSG00000187634
- 5 ENSG00000268179
- 6 ENSG00000188976
- 7 ENSG00000187961
- 8 ENSG00000187583
- 9 ENSG00000187642
- 10 ENSG00000188290
- 11 ENSG00000187608
- 12 ENSG00000188157
- 13 ENSG00000237330
- 14 ENSG00000131591
- 15 ENSG00000162571
复制代码- ~~~~~~
- ENSG00000187961 7
- ENSG00000187642 9
- ENSG00000188290 10
- ~~~~~~
- ENSG00000186092 2
- ENSG00000235249 3
- ENSG00000187634 4
- ENSG00000268179 5
复制代码 楼主~程序还是有问题
当2和9有关联的这种情况下,无法去冗余
好纠结
可能是我想的复杂了,或者跳进自己固化的模式出不来。
代码又复杂,又麻烦。
可能过段时间会有别的想法···
期待大神 |
|