Extract Maximum and minimum value using awk Extract Maximum and minimum value using awk shell shell

Extract Maximum and minimum value using awk


with gnu awk:

awk '{for(x=1;x<=NF;x++)a[++y]=$x}END{c=asort(a);print "min:",a[1];print "max:",a[c]}'

output:

min: 9max: 99

without awk:

xargs -n1|sort -n|head or tail -1

e.g.

min:

kent$  echo "20 90 60 3055 75 80 8510 15 99 9555 95 70 209  35 85 75"|xargs -n1|sort -n|head -19

max:

kent$  echo "20 90 60 3055 75 80 8510 15 99 9555 95 70 209  35 85 75"|xargs -n1|sort -n|tail -199

you can of course xargs -n1|sort -n then pipe to awk to pick first and last and print in one shot.


If you have GNU awk:

# using arrayawk '{x[NR]=$1}END{asort(x);print "max="x[NR],"min="x[1]}' RS=' +|\n' filemax=99 min=9# No arrayawk 'NR==1{m=n=$1}{$1>m?m=$1:m;$1<n?n=$1:n}END{print "max="m,"min="n}' RS=' +|\n' filemax=99 min=9


awk 'NR == 1 { min=max=$1 }{    for (i=1;i<=NF;i++) {        min = (min < $i ? min : $i)        max = (max > $i ? max : $i)    }}END {    printf "min value = %s\n", (min == "" ? "NaN" : min)    printf "max value = %s\n", (max == "" ? "NaN" : max)}' file

The test resulting in "NaN" is to accommodate empty input files.