user1326177
user1326177

Reputation: 31

find the Max and Min with AWK in specific range

I have file with three columns , I want to get max of $3 and min of $2 but in specific range of $1 with awk:

Col1 Col2 Col3
==============
X    1    2
X    3    4
Y    5    6
Y    7    8

E.g. I want to get the minimum value of Col2 , and the maximum value of Col3 while Col1=X.

I could handle max and min value but I dont find out how to find it in specific range this is my code :

awk ' min=="" || $2 < min {min=$2; minline=$0} $3 > max {max=$3; maxline=$0};END {print $1,min,max}'

I tried to add {If ($1==X)} but It doesnt work well.

Upvotes: 3

Views: 2968

Answers (3)

glenn jackman
glenn jackman

Reputation: 247210

If you want to collect all the minima and maxima:

awk '
  $2 < min[$1] {min[$1] = $2}
  $3 > max[$1] {max[$1] = $3}
  {col1[$1] = 1}
  END {for (c in col1) {print c, min[c], max[c]}}
' file

Upvotes: 2

Zsolt Botykai
Zsolt Botykai

Reputation: 51693

What about:

awk 'BEGIN { c=1 }
     $1 == "X" { if (c==1) { mmin=$2; mmax=$3 ;c++ }
                 if ($2<mmin) { mmin=$2 }
                 if ($3>mmax) { mmax=$3 }
     } 
     END { print "X min: " mmin ", max: " mmax }' INPUTFILE

See it in action @ Ideone.

Upvotes: 2

Kent
Kent

Reputation: 195269

kent$  echo "X    1    2
X    3    4
Y    5    6
Y    7    8
"|awk '$1=="X"{min=$2<min||min==""?$2:min;max=$3>max||max==""?$3:max}END{print min,max}'
1 4

is this what you want?

Upvotes: 3

Related Questions