2012-05-12 15 views
1

如果第Y列只包含正值每個不同的元素,下面的awk命令工作正常:在awk中,如何找到最大的第Y列彩車在列X

$ echo -e "g1 2\ng1 3\ng2 4\ng2 1\ng3 1" > input_pos.txt 
$ cat input_pos.txt 
g1 2 
g1 3 
g2 4 
g2 1 
g3 1 
$ awk '{if(! $1 in a)a[$1]=$2; else if($2 > a[$1])a[$1]=$2} END{for(i in a) print i,a[i]}' input_pos.txt 
g1 3 
g2 4 
g3 1 

它的工作原理也和只要有至少一個正數:

$ echo -e "g1 -2\ng1 -3\ng2 -4\ng2 -1\ng3 -1" > input_neg.txt 
$ cat input_neg.txt 
g1 -2 
g1 -3 
g2 -4 
g2 -1 
g3 -1 
$ awk '{if(! $1 in a)a[$1]=$2; else if($2 > a[$1])a[$1]=$2} END{for(i in a) print i,a[i]}' input_neg.txt 
g1 
g2 
g3 

$ echo -e "g1 2\ng1 -3\ng2 4\ng2 1\ng3 1" > input_pos-neg.txt 
$ cat input_pos-neg.txt 
g1 2 
g1 -3 
g2 4 
g2 1 
g3 1 
$ awk '{if(! $1 in a)a[$1]=$2; else if($2 > a[$1])a[$1]=$2} END{for(i in a) print i,a[i]}' input_pos-neg.txt 
g1 2 
g2 4 
g3 1 

但是,它並沒有當只有負數工作

同上在這個例子中:

$ echo -e "g1 -2\ng1 -3\ng2 4\ng2 1\ng3 1" > input_neg2.txt 
$ cat input_neg2.txt 
g1 -2 
g1 -3 
g2 4 
g2 1 
g3 1 
$ awk '{if(! $1 in a)a[$1]=$2; else if($2 > a[$1])a[$1]=$2} END{for(i in a) print i,a[i]}' input_neg2.txt 
g1 
g2 4 
g3 1 

我看着GAWK手冊(Conversions of strings and numbers),我試圖到0添加到$ 2以迫使>比較而被作爲數字進行,但仍然不能找到解決我的問題。任何想法都歡迎!

回答

2

你的問題是!運營商的關係比in更難,因此,如果您圓括號(! $1 in a),即(! ($1 in a))它的工作原理。

相關問題