3

我有一个包含三列的文件,我想获得最大值$3和最小值,$2但在特定范围$1awk

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

例如,我想获得 的最小值和whileCol2的最大值。Col3Col1=X

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

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

我尝试添加{If ($1==X)},但效果不佳。

4

3 回答 3

3
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

这是你想要的吗?

于 2012-04-11T09:51:40.797 回答
2

关于什么:

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

在行动中看到它@Ideone

于 2012-04-11T09:50:41.497 回答
2

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

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
于 2012-04-11T10:35:59.837 回答