4

awk如何使用命令从下表中找到最大值和最小值。

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

我想要像 maxvalue=99min=9

4

3 回答 3

7

使用gnu awk:

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

输出:

min: 9
max: 99

没有awk:

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

例如

分钟:

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

最大限度:

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

您当然可以通过xargs -n1|sort -n管道连接到 awk 以选择第一个和最后一个并一次性打印。

于 2013-07-12T14:20:26.053 回答
4
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

导致“NaN”的测试是为了容纳空输入文件。

于 2013-07-12T14:16:17.960 回答
4

如果您有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
于 2013-07-12T14:18:50.127 回答