2012-11-27 8 views
5

moje pytanie jest prawie jak this one, ale z jedną różnicą; Chcę, aby wynik był linią, która ma najwyższy wynik na trzeciej zakładce. moje dane jak:Bash wyprowadza linię o największej wartości

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

i chcę uzyskać to:

1.gui Qxy 23 
3.guT QWS 11 

użyłem:

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

ale nie dostać to, co chcę !?

+0

Czy można ponownie sprawdzić wejście i wyjście? Czy '1.gui ...' na wyjściu powinno być '2.gui ...'? –

+0

@ Raze2pust numery nie są ważne dla pierwszej zakładki; po prostu po to, aby wyreżyserować numery linii .. – teutara

+0

k .. wtedy powinieneś zmienić '3.guT' na' 2.guT' na wyjściu. W przeciwnym razie jest mylące. –

Odpowiedz

4

Z 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 odwrotnej porządek, najpierw najwyższa.

-k3 sortowanie w trzeciej kolumnie.


Jeśli chcesz tylko do wyświetlania linii, które 3rd kolumna jest większa niż pewna wartość (czyli 15) następnie spróbuj to za pomocą awk:

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

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

dzięki @sudo_O .. po sortowaniu masz tylko pierwszą linię, ale chcę uzyskać wszystkie wystąpienia .. – teutara

+0

Rzecz w tym, że mój plik ma ~ 10 milionów wierszy, nie wiem, ile wystąpień dla każdego .. znaczenie, czynię nie wiem, ile linii mogę uzyskać z głową .. – teutara

+0

Jeśli chcesz wszystkie wyniki po prostu "sort -rk3 file" –

3

dla przyszłych użytkowników z tym samym pytaniem:

nie zapomnij wprowadzić -n przejść do polecenia -sort lub twoje wartości są sortowane od 9999, a następnie 999 itp. Więc używaj

sort -rnk3 file 

i jeśli chcesz dostać tylko jedną linię z najwyższej wartości (usunąć duplikaty) użyj:

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

a jeśli masz zwykły separator można powiedzieć -awk zauważyć:

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

Świetnie - szukałem tego konkretnego konstruktu awk, który zapobiega duplikatom na określonym polu - nie wiem jeśli można to osiągnąć za pomocą sortowania bashowego - wydaje się, że '-u' działa na całej linii. – plof

Powiązane problemy