Reputation: 597
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
Upvotes: 4
Views: 18995
Reputation: 203324
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.
Upvotes: 4
Reputation: 195039
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.
Upvotes: 7
Reputation: 85785
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
Upvotes: 4