3

私は3つの列を持つファイルを持っています、私はの最大値$3と最小値を取得したいのです$2が、特定の範囲$1awk:

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

たとえば、 whileの最小値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)}たが、うまくいきません。

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 に答える