2012-04-11 135 views
2

我有三列的文件,我想獲得的最大$3$2分鐘,但在$1特定範圍內awk找到最大值和最小值與AWK在特定範圍

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

例如我想要得到的最小值爲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)}但它不工作。

回答

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 2012-04-11 10:23:16

+0

然後通過閱讀http://stackoverflow.com/faq#reputation – 2012-04-11 11:17:21

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 2012-04-11 10:20:17

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 
相關問題