#!/usr/bin/perl use strict; require XML::Simple; use Data::Dumper; use subs; my %args = getParams(); my $xml_file = new XML::Simple(); my $probes = $xml_file->XMLin($args{inputfile}, keyattr => {}); my @index; for (my $i=0; $i<@{$probes->{probe}}; $i++) { push @index, [$i, $probes->{probe}->[$i]->{species}->[0]->{probe_start}]; } @index = sort { $a->[1] <=> $b->[1] } @index; open (OUTFILE,">".$args{outputfile}); for (my $i=0; $i<@index; $i++) { #print $probes->{probe}->[$index[$i][0]]->{species}->[0]]->{probe_start} . "\n"; printf OUTFILE " \n"; printf OUTFILE " \n", $probes->{probe}->[$index[$i][0]]->{time}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{date}; printf OUTFILE " \n"; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{length}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{alignment_identity}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{probe_identity}; printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{transversions}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{transitions}; printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{gaps}; printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{probe_alignment}; printf OUTFILE " \n"; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{name}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{file}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{version}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{alignment_start}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{alignment_end}; printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{chromosome}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[0]->{alignment_strand}; printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{probe_start}; printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{probe_end}; printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[0]->{sequence}; printf OUTFILE " \n"; printf OUTFILE " \n"; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{name}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{file}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{version}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{alignment_start}; printf OUTFILE " %d\n", $probes->{probe}->[$index[$i][0]]->{species}->[1]->{alignment_end}; printf OUTFILE " %s\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{alignment_strand}; printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[1]->{chromosome}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{probe_start}; printf OUTFILE " %d\n",$probes->{probe}->[$index[$i][0]]->{species}->[1]->{probe_end}; printf OUTFILE " %s\n", $probes->{probe}->[$index[$i][0]]->{species}->[1]->{sequence}; printf OUTFILE " \n"; printf OUTFILE " \n\n\n"; } close OUTFILE; ######################################################################### # getParams - gets all options from the command line or keeps defaults # dies if required options are not included # ######################################################################### sub getParams { my %opts; my $errstr = ""; use Getopt::Long; use Data::Dumper; GetOptions(\%opts, 'inputfile:s','outputfile:s', 'help'); if ($opts{help}) { $errstr = " "; } if ($errstr) { print <<"END_USAGE"; Description: This script will take a XML probe document, and will sort the probes based upon start bp location. Usage: combine.pl -inputfile -outputfile [-help] END_USAGE print "\n$errstr" if ($errstr); die("\n"); } return ( inputfile => $opts{inputfile}, outputfile => $opts{outputfile} ); }