2012-04-11 42 views
2

特定の範囲にAWKでの最大値と最小を見つけ、私はawk$3のmaxと$2の分が、$1の特定の範囲内を取得したい:私は3つの列を持つファイルを持っている

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

例えば私はCol2の最小値、そしてCol3の最大値、Col1=Xを得たいと思います。

私は、最大値と最小値を扱うことができるが、私は、これは私のコードである特定の範囲 でそれを見つける方法を見つけるいけない:

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

私は{If ($1==X)}を追加しようとしましたが、それはうまく動作doesntの。

答えて

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

+0

をはい、それは同様にそれだ – user1326177

+0

その後はいこのhttp://stackoverflow.com/faq#reputation –

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 

これは何ですか?

+0

を読んで、ありがとう! :) – user1326177

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 
関連する問題