2012-11-27 10 views
5

meine Frage ist so ziemlich wie this one, aber mit einem Unterschied; Ich möchte die Zeile mit der höchsten Punktzahl auf der 3. Registerkarte ausgeben. meine Daten wie:Bash gab die Linie mit dem höchsten Wert aus

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

und ich möchte dies erhalten:

1.gui Qxy 23 
3.guT QWS 11 

I verwendet:

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

aber nicht bekommen, was ich will !?

+0

Können Sie die Eingabe und Ausgabe erneut überprüfen? Sollte das '1.gui ...' in der Ausgabe '2.gui ...' sein? –

+0

@ Raze2dust die Zahlen sind nicht wichtig für die erste Registerkarte; sie nur um Liniennummern zu repr .. – teutara

+0

k .. dann sollten Sie die '3.guT' in '2.GuT' in der Ausgabe ändern. Es ist sonst verwirrend. –

Antwort

4

Mit 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 umgekehrte Sortierung, höchster zuerst.

-k3 Sortieren auf der 3. Spalte.


Wenn Sie nur Zeile angezeigt werden soll, die die dritte Spalte größer als ein Wert ist (dh 15) dann versuchen, diese awk mit:

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

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

danke @sudo_O .. nach dem Sortieren haben Sie nur die erste Zeile, aber ich möchte die alle Vorkommen .. – teutara

+0

die Sache ist, hat meine Datei ~ 10 Millionen Zeilen, ich weiß nicht, wie viele Vorkommen für jeden .. bedeutung, ich tue nicht wissen, wie viele Zeilen ich mit Kopf bekommen kann. – teutara

+0

Wenn Sie alle Ergebnisse nur tun wollen 'sort -rk3 Datei' –

3

für zukünftige Benutzer mit derselben Frage:

Vergessen Sie nicht, -n zu dem Befehl -sort einzuführen, oder Ihre Werte werden ab 9999 und gefolgt von 999 usw. bestellt. Verwenden Sie also

sort -rnk3 file 

, und wenn Sie nur eine Zeile mit dem höchsten Wert erhalten möchten (Duplikate entfernen) verwenden diese:

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

und wenn Sie einen üblichen Trennzeichen haben, können Sie -awk sagen zu bemerken:

sort -rnk3 file | awk -F"[. ]" '!x[$2]++' 
+0

Großartig - Ich war auf der Suche nach dem spezifischen Awk-Konstrukt, das Duplikate auf einem bestimmten Feld verhindert - ich weiß es nicht Wenn das nur mit bash sort erreicht werden kann, scheint '-u' auf der ganzen Linie zu funktionieren. – plof

Verwandte Themen