在特定范围内找到AWK的最大值和最小值

时间:2012-04-11 09:21:36

标签: awk max min

我的文件包含三列,我希望得到$3$2的最大值,但在$1的特定范围内awk

Col1 Col2 Col3
==============
X    1    2
X    3    4
Y    5    6
Y    7    8

E.g。我希望获得Col2的最小值,以及Col3Col1=X的最大值。

我可以处理最大值和最小值,但我不知道如何在特定范围内找到它 这是我的代码:

awk ' min=="" || $2 < min {min=$2; minline=$0} $3 > max {max=$3; maxline=$0};END {print $1,min,max}'

我尝试添加{If ($1==X)},但它无效。

3 个答案:

答案 0 :(得分:2)

kent$  echo "X    1    2
X    3    4
Y    5    6
Y    7    8
"|awk '$1=="X"{min=$2<min||min==""?$2:min;max=$3>max||max==""?$3:max}END{print min,max}'
1 4

这就是你想要的吗?

答案 1 :(得分:1)

怎么样:

awk 'BEGIN { c=1 }
     $1 == "X" { if (c==1) { mmin=$2; mmax=$3 ;c++ }
                 if ($2<mmin) { mmin=$2 }
                 if ($3>mmax) { mmax=$3 }
     } 
     END { print "X min: " mmin ", max: " mmax }' INPUTFILE

See it in action @ Ideone

答案 2 :(得分:1)

如果您想收集所有最小值和最大值:

awk '
  $2 < min[$1] {min[$1] = $2}
  $3 > max[$1] {max[$1] = $3}
  {col1[$1] = 1}
  END {for (c in col1) {print c, min[c], max[c]}}
' file