#!/usr/bin/ksh

tmpfile=tmp$$.ram.stats

echo nmonfile, count, min_used, avg_used, max_used, 95percentileGB
for file in $*
do
        printf "%s, " $( basename $file | sed 's/\.nmon//' )

	head $file | grep AAA,AIX >/dev/null
	if (( $? == 0 ))
	then
		os=AIX
	else
		os=Linux
	fi
        
	cat $file | grep ^MEM,T  >$tmpfile
	if (( $? != 0 ))
	then
		rm -f $tmpfile
		echo $file "skipping as no MEM,T records found"
		exit
	fi

	if [[ $os == "AIX" ]]
	then
	# AIX
	cat $tmpfile | awk -F , '
	BEGIN { count=0; total=0.0; maxused=0.0; minused=9999999999.0; size=2.0; free=1.0; used=0.0 }
	{ count=count+1; free=$5; size=$7; used=size-free; total=total+used; if(used < minused) { minused=used;}; if(used > maxused) { maxused=used;} }
	END { printf( "%8d, %5.2f, %5.2f, %5.2f", count, minused/1024.0, total/count/1024.0, maxused/1024.0) } '
	else
	# Linux
	cat $tmpfile | awk -F , '
	BEGIN { count=0; total=0.0; maxused=0.0; minused=9999999999.0; size=2.0; free=1.0; used=0.0 }
	{ count=count+1; free=$7; size=$3; used=size-free; total=total+used; if(used < minused) { minused=used;}; if(used > maxused) { maxused=used;} }
	END { printf( "%8d, %5.2f, %5.2f, %5.2f", count, minused/1024.0, total/count/1024.0, maxused/1024.0) } '
	fi

	integer RECORDS
	integer PERCENTILE
	RECORDS=`cat $tmpfile | wc -l `
	PERCENTILE=$RECORDS-$RECORDS/20
	 if [[ $os == "AIX" ]]
        then
	cat $tmpfile | awk -F , '{ printf( " %5.2f\n",($7-$5)/1024.0) }' | sort -nr | tail -$PERCENTILE | read result
	else
	cat $tmpfile | awk -F , '{ printf( " %5.2f\n",($3-$5)/1024.0) }' | sort -nr | tail -$PERCENTILE | read result
	fi
	echo  ", " $result
done

rm -f tmp$$.ram.stats
exit

# AIX Example data and column numbering
1 MEM,
2 Memory hostname,
3 Real Free %,
4 Virtual free %,
5 Real free(MB),
6 Virtual free(MB),
7 Real total(MB),
8 Virtual total(MB)

MEM,Memory sapsprbbiwd,Real Free %,Virtual free %,Real free(MB),Virtual free(MB),Real total(MB),Virtual total(MB)
MEM,T0001,2.7,56.1,667.7,17226.8,24576.0,30720.0
MEM,T0002,2.8,56.1,686.5,17226.8,24576.0,30720.0

#LINUX
1 MEM,
2 Memory MB sesosapl999,
3 memtotal,
4 hightotal,
5 lowtotal,
6 swaptotal,
7 memfree,
8 highfree,
9 lowfree,
10 swapfree,
11 memshared,
12 cached,
13 active,
14 bigfree,
15 buffers,
16 swapcached,
17 inactive

MEM,Memory MB sesosapl999,memtotal,hightotal,lowtotal,swaptotal,memfree,highfree,lowfree,swapfree,memshared,cached,active,bigfree,buffers,swapcached,inactive
MEM,T0001,143623.4,-0.0,-0.0,1939.9,438.4,-0.0,-0.0,24.9,-0.0,7272.4,135753.4,-1.0,8.9,83.8,4617.8
MEM,T0002,143623.4,-0.0,-0.0,1939.9,421.4,-0.0,-0.0,24.9,-0.0,7281.8,135788.6,-1.0,8.9,83.8,4622.5
