3 Stimmen

Max und Min mit AWK in einem bestimmten Bereich finden

Ich habe eine Datei mit drei Spalten, ich möchte maximal $3 und mindestens von $2 sondern in einem bestimmten Bereich von $1 con awk :

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

Ich möchte z. B. den Mindestwert von Col2 und der Höchstwert von Col3 während Col1=X .

Ich konnte max und min Wert behandeln, aber ich finde nicht heraus, wie es in bestimmten Bereich zu finden Dies ist mein Code:

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

Ich habe versucht, Folgendes hinzuzufügen {If ($1==X)} aber es funktioniert nicht gut.

3voto

Kent Punkte 180747
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

Ist es das, was Sie wollen?

2voto

Zsolt Botykai Punkte 48177

Worüber?

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

Sehen Sie es in Aktion @ Ideone .

2voto

glenn jackman Punkte 221248

Wenn Sie alle Minima und Maxima sammeln wollen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X