view SampleDEGseqMerge.pl @ 50:7b5a48b972e9 draft

Uploaded
author big-tiandm
date Fri, 05 Dec 2014 00:11:02 -0500
parents
children
line wrap: on
line source

#!/usr/bin/perl -w
#Filename:
#Author: Tian Dongmei
#Email: chentt@big.ac.cn
#Date: 2014-05-21
#Modified:
#Description: merged deg file and total information
my $version=1.00;

use strict;
use Getopt::Long;

my %opts;
GetOptions(\%opts,"i:s@","mark:s@","f:s","o=s","n=s","h");
if (!(defined $opts{o} ) || defined $opts{h}) { #necessary arguments
&usage;
}

my @filein=@{$opts{'i'}};
my @mark=@{$opts{'mark'}};
my $fileout=$opts{'o'};
my $number=$opts{'n'};

my %hash;
open IN,"<$filein[0]"; #input file  

while (my $aline=<IN>) {
	chomp $aline;
	next if($aline=~/^\"/);
	my @temp=split/\t/,$aline;
	$hash{$temp[0]}=$temp[4]."\t".$temp[6]."\t".$temp[7]."\t".$temp[-1];
}
close IN;

for (my $i=1;$i<=$#filein;$i++) {
	open IN,"<$filein[$i]"; #input file  

	while (my $aline=<IN>) {
		chomp $aline;
		next if($aline=~/^\"/);
		my @temp=split/\t/,$aline;
		if (!(defined $hash{$temp[0]})) {
			print "Not find $temp[0]in sample one!\n";
			next;
		}
		$hash{$temp[0]} .="\t".$temp[4]."\t".$temp[6]."\t".$temp[7]."\t".$temp[-1];
	}
	close IN;
}

open OUT,">$fileout"; #output file  
my $deg_title;
foreach (@mark) {
	$deg_title.="log2(Fold_change)\tp_value\tq_value\t".$_."\t";
}
$deg_title=~s/\s+$//;
my %function;
my $title;
open F,"<$opts{f}";
while (my $aline=<F>) {
	chomp $aline;
	if($aline=~/^\#/){
		my $title=$aline;
		my @title=split/\t/,$aline;
		$title[2+$number].="\t".$deg_title;
		$title=join"\t",@title;
		print OUT "$title\n";
		next;
	}
	my @temp=split/\t/,$aline;
	$temp[2+$number].="\t".$hash{$temp[0]};
	my $temp=join"\t",@temp;
	print OUT "$temp\n";

}
close F;
close OUT;

sub usage{
print <<"USAGE";
Version $version
Usage:
$0 -i -o -mark -f
options:
-i input file # -i output_score.txt -i output_score.txt -i output_score.txt
-mark  sample name  # -mark sam1_VS_sam2 -mark sam1_VS_sam3 -mark sam2_VS_sam3
-f cluster file
-n sample number
-o output file
-h help
USAGE
exit(1);
}