Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract Maximum and minimum value using awk

Tags:

shell

unix

awk

How to find maximum and minimum value from the below table using awk command.

20 90 60 30
55 75 80 85
10 15 99 95
55 95 70 20
9  35 85 75

I want the output like max value=99 and min=9

like image 206
Green Avatar asked Dec 06 '22 06:12

Green


2 Answers

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: 9
max: 99

without awk:

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

e.g.

min:

kent$  echo "20 90 60 30
55 75 80 85
10 15 99 95
55 95 70 20
9  35 85 75"|xargs -n1|sort -n|head -1
9

max:

kent$  echo "20 90 60 30
55 75 80 85
10 15 99 95
55 95 70 20
9  35 85 75"|xargs -n1|sort -n|tail -1
99

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

like image 147
Kent Avatar answered Jan 12 '23 13:01

Kent


If you have GNU awk:

# using array
awk '{x[NR]=$1}END{asort(x);print "max="x[NR],"min="x[1]}' RS=' +|\n' file
max=99 min=9

# No array
awk 'NR==1{m=n=$1}{$1>m?m=$1:m;$1<n?n=$1:n}END{print "max="m,"min="n}' RS=' +|\n' file
max=99 min=9
like image 42
Chris Seymour Avatar answered Jan 12 '23 13:01

Chris Seymour