Extract Maximum and minimum value using awk

2020-02-26 12:32发布

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

标签: shell unix awk
3条回答
唯我独甜
2楼-- · 2020-02-26 12:38
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.

查看更多
Lonely孤独者°
3楼-- · 2020-02-26 12:46

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.

查看更多
甜甜的少女心
4楼-- · 2020-02-26 12:54

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
查看更多
登录 后发表回答