Mercurial > repos > lsong10 > psiclass
view PsiCLASS-1.0.2/ManipulateIntronFile.pl @ 0:903fc43d6227 draft default tip
Uploaded
author | lsong10 |
---|---|
date | Fri, 26 Mar 2021 16:52:45 +0000 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env perl use strict ; use warnings ; die "usage: a.pl intronA intronB [op]\n" if (@ARGV == 0 ) ; my %intronInfo ; my %chromRank ; sub sortIntron { my @cols1 = split /\s+/, $a ; my @cols2 = split /\s+/, $b ; if ( $cols1[0] ne $cols2[0] ) { $chromRank{ $cols1[0] } cmp $chromRank{ $cols2[0] } ; } elsif ( $cols1[1] != $cols2[1] ) { $cols1[1] <=> $cols2[1] ; } else { $cols1[2] <=> $cols2[2] ; } } open FP1, $ARGV[0] ; my $cnt = 0 ; while ( <FP1> ) { chomp ; my $line = $_ ; my @cols = split /\s+/ ; push @cols, 1 ; @{ $intronInfo{ $cols[0]." ".$cols[1]." ".$cols[2] } } = @cols ; if ( !defined $chromRank{ $cols[0]} ) { $chromRank{ $cols[0] } = $cnt ; ++$cnt ; } } close FP1 ; open FP1, $ARGV[1] ; while ( <FP1> ) { chomp ; my $line = $_ ; my @cols = split /\s+/ ; my $key = $cols[0]." ".$cols[1]." ".$cols[2] ; next if ( !defined $intronInfo{ $key } ) ; my @infoCols = @{ $intronInfo{ $key } } ; $infoCols[4] = $cols[4] if ( $infoCols[4] ne "+" || $infoCols[4] ne "-" ) ; $infoCols[9] |= 2 ; @{ $intronInfo{ $key } } = @infoCols ; } close FP1 ; foreach my $key (sort sortIntron keys %intronInfo ) { my @infoCols = @{ $intronInfo{ $key } } ; #print join( " ", @infoCols ), "\n" ; next if ( $infoCols[9] != 3 ) ; pop @infoCols ; print join( " ", @infoCols ), "\n" ; }