2012-04-11 5 views
2

Je fichier avec trois colonnes, je veux max $3 et min de $2 mais dans la gamme spécifique de $1 avec awk:trouver Max et Min avec AWK dans la gamme spécifique

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

Par ex Je veux obtenir la valeur minimale de Col2, et la valeur maximale de Col3 tandis que Col1=X.

je pouvais gérer la valeur max et min mais je ne savoir comment le trouver dans la gamme spécifique voici mon code:

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

J'ai essayé d'ajouter {If ($1==X)} mais il ne marche pas bien.

Répondre

1

Qu'en est-:

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

Oui, c'est aussi bien – user1326177

+0

lire ensuite ce 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 

c'est ce que vous voulez?

+0

Oui, merci! :) – user1326177

1

Si vous souhaitez collecter tous les minima et maxima:

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