Need to pick max values of the columns

Hi,

I have sar disk reports like below sample:

01:01:00    hdisk24      0      0.0        0        0      0.0      0.0
            hdisk15      0      0.0        0        3      0.0      5.5
            hdisk20      0      0.0        2        1      0.0      1.9
            hdisk19      1      0.0        2        1      0.0      4.5
            hdisk18      0      0.0        0        0      0.0      0.0
            hdisk16      0      0.0        0        0      0.0      0.0
            hdisk22      0      0.0        0        0      0.0      0.0
            hdisk14      0      0.0        1        5      0.1      1.0
            hdisk21      1      0.0        2        1      0.0      3.8
            hdisk17      0      0.0        0        0      0.0      0.5
            hdisk23      0      0.0        0        0      0.0      0.0
             hdisk2      0      0.0        0        0      0.0      0.0
             hdisk0      0      0.0        0        0      0.0      1.8


01:06:00    hdisk24      0      0.0        0       24      0.0      7.3
            hdisk15      0      0.0        1       95      0.1      4.2
            hdisk20      0      0.0        2        1      0.0      2.3
            hdisk19      0      0.0        2        1      0.0      2.2
            hdisk18      0      0.0        0        0      0.0      0.0
            hdisk16      0      0.0        0        0      0.0      0.0
            hdisk22      0      0.0        0        0      0.0      0.0
            hdisk14      0      0.0        1        9      0.9      2.0
            hdisk21      0      0.0        2        1      0.0      2.8
            hdisk17      0      0.0        0        0      0.0      1.1
            hdisk23      0      0.0        0       22      0.0      9.1
             hdisk2      0      0.0        0        0      0.0      0.0
             hdisk0      0      0.0        0        0      0.0      2.2


01:11:00    hdisk24      0      0.0        0        0      0.0      0.0
            hdisk15      0      0.0        0        6      0.0      2.5
            hdisk20      0      0.0        2        1      0.0      1.4
            hdisk19      0      0.0        2        1      0.0      1.5
            hdisk18      0      0.0        0        0      0.0      0.0
            hdisk16      0      0.0        0        0      0.0      0.0
            hdisk22      0      0.0        0        0      0.0      0.0
            hdisk14      0      0.0        1       10      0.3      1.6
            hdisk21      0      0.0        2        1      0.0      2.2
            hdisk17      0      0.0        0        0      0.0      0.7
            hdisk23      0      0.0        0        0      0.0      0.0
             hdisk2      0      0.0        0        0      0.0      0.0
             hdisk0      0      0.0        0        0      0.0      1.6

I need to pick the max values of each column and discard the hard drive (column 2) so that output would be like:

01:01:00    1      0.0        2        5      0.1      5.5
01:06:00    0      0.0        2       95      0.9      9.1	
01:11:00    0      0.0        2       10      0.3      2.5

Pls advise, thank you.

Other than not printing the tab character that you show at the end of the 2nd line of your specified sample output, the following seems to do what you want:

awk '
$1 ~ /:/ {
	if(t) p()
	t = $1
	mf = NF - 1
	for(i = 3; i <= NF; i++) 
		m[i - 1] = $i
	next
}
function p(	i) {
	printf("%s %4s ", t, m[2])
	for(i = 3; i <= mf; i++)
		printf("%8s%s", m, i == mf ? "\n" : " ")
}
{	for(i = 2; i <= mf; i++)
		if(m < $i)
			m = $i
}
END {	p()
}' file

As always, if you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk , /sur/xpg6/bin/awk , or nawk .

Bit messy but this should work:

awk '/^[0-9]/{ptime=time;time=$1;f++}
{
    if ((NF) && (f!=a)) {
         printf ptime "\t" max1 "\t" max2 "\t" max3 "\t" max4 "\t" max5 "\t" max6 "\n"
         max1=max2=max3=max4=max5=max6=""
         }

    if (NF){
         max1=(max1>$(NF-5)?max1:$(NF-5))
         max2=(max2>$(NF-4)?max2:$(NF-4))
         max3=(max3>$(NF-3)?max3:$(NF-3))
         max4=(max4>$(NF-2)?max4:$(NF-2))
         max5=(max5>$(NF-1)?max5:$(NF-1))
         max6=(max6>$NF?max6:$NF)
        }
}
{a=f}
END {printf time "\t" max1 "\t" max2 "\t" max3 "\t" max4 "\t" max5 "\t" max6 "\n"}
' 

Also try :

awk '  function p(  i){
		for(i=1; i<=k; i++)
		printf("%8s%s", i == 1 ? sprintf("%4s%s%8s",f,OFS,a) : a , i==k ? RS : OFS)
		delete a
	}
        {
	   s  = 2  
        }
	$1~/:/{ 
		if(f)p()
		f = $1
		s = 3 
	}
	NF{ 
		k = 0
		for(i=s; i<=NF; i++)
		{
			++k
			a[k] = (k in a && a[k] > $i) ? a[k] : $i 
		}
	} 
	END{
		p()
	}
    ' file 
01:01:00        1      0.0        2        5      0.1      5.5
01:06:00        0      0.0        2       95      0.9      9.1
01:11:00        0      0.0        2       10      0.3      2.5