#!/usr/bin/perl -w use strict; my $col = shift @ARGV; if (!defined $col) { print "usage: basicStats.pl #colNum0based < infile > outfile\n"; exit; } my $sum = 0; my $cnt = 0; my @num; my $min; my $max; while (<>) { chomp; my @f = split(/\t/); if (scalar @f < $col) { #try splitting on spaces @f = split(/\s/); } if ($f[$col] !~ /^-?[0-9]+\.?\d*$/) { if ($f[$col] !~ /^\d\.\d+e-\d+$/) { #allow scientific nums 8.25218682951e-05 print "ERROR selected column is not a number $f[$col]\n"; exit; } } $sum += $f[$col]; push(@num, $f[$col]); $cnt++; if (!defined $min) { $min = $f[$col]; $max = $f[$col]; }else { if ($f[$col] < $min) { $min = $f[$col]; } if ($f[$col] > $max) { $max = $f[$col]; } } } @num = sort { $a <=> $b } @num; my $m = int($cnt/2); print "Found $cnt numbers with min $min and max $max\n", "sum ", $sum, "\n", "average ", $sum/$cnt, "\n", "median ", $num[$m], "\n"; my $q = int($cnt/4); print "first quartile ", $num[$q], "\n"; $q = 3*$q; print "third quartile ", $num[$q], "\n";