2012-11-27 41 views
5

我的問題與this one非常相似,但有一點區別;我希望輸出在第三個選項卡上得分最高的線。我的數據是這樣的:Bash輸出最高值的線

1.gui Qxx 16 
2.gui Qxy 23 
3.guT QWS 11 

,我想會得到:

1.gui Qxy 23 
3.guT QWS 11 

我用:

cat file.f | uniq | cut -d" " -f3 | sort | uniq -d >>out.f 

,但沒有得到我想要什麼!?

+0

你能重新檢查輸入和輸出嗎?輸出中的1.gui ...是否應該是2.gui ...? –

+0

@ Raze2dust數字對第一個標籤不重要;他們只是爲了排除行號.. – teutara

+0

k ..那麼你應該在輸出中將'3.guT'改爲'2.guT'。否則會令人困惑。 –

回答

4

隨着sort

$ sort -rk3 file    # Sort on column 3, display all results 

2.gui Qxy 23 
1.gui Qxx 16 
3.guT QWS 11 

$ sort -rk3 file | head -2 # Sort on column 3, filter number of results 

2.gui Qxy 23 
1.gui Qxx 16 

$ sort -rk3 file | uniq  # Sort on column 3, on display unique results 

2.gui Qxy 23 
1.gui Qxx 16 
3.guT QWS 11 

-r逆向排序,最高優先。

-k3排序在第3列。


如果你只是想顯示線,第三列是比一些價值更大(即15)那就試試這個使用awk

awk '$3>15' file | sort -rk3 # Display line where column 3 > 15 and sort 

2.gui  Qxy  23 
1.gui  Qxx  16 
+0

謝謝@sudo_O ..排序後,你只有第一行,但我想獲得所有的事件.. – teutara

+0

事情是,我的文件有~10萬行,我不知道每個..多少事件..我的意思是不知道有多少線我可以得到頭.. – teutara

+0

如果你想所有的結果只是'排序-rk3文件' –

3

對於同一個問題未來用戶:

不要忘記引入-n切換到-sort命令,或者您的值從9999開始排序,然後是999開始等等。所以請使用

sort -rnk3 file 

,如果你想獲得最高值只有一行(刪除重複項)使用此:

sort -rnk3 file | awk '!x[$2]++' 

,如果你有一個常用的分隔符,你可以告訴-awk注意:

​​3210
+0

偉大 - 我正在尋找特定的awk構造,防止重複在一個特定的領域 - 我不知道如果這可以通過bash排序來實現 - 似乎'-u'可以在整個行上運行。 – plof