使用awk提取最大值和最小值

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

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

我想输出像最大值value=99min=9

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来选择第一个和最后一个并且一次打印。

如果你有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 
 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”的测试是为了容纳空的输入文件。