2012-04-11 3 views
2

у меня есть файл с тремя колонками, я хочу, чтобы получить максимум от $3 и мин $2, но в определенном диапазоне $1 с awk:найти Макс и Мин с AWK в определенном диапазоне

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)}, но он не работает хорошо.

ответ

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 
Смежные вопросы