To powinno działać:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
Do -v max=0
ustawia zmienną max
do 0
, a następnie dla każdej linii, pierwsze pole jest porównywana z wartością bieżącą max
. Jeśli jest większa, max
jest ustawiona na wartość pierwszego pola i want
na bieżącą linię. Gdy program przetworzy cały plik, want
drukowana jest bieżąca wartość parametru .
Edytować
Nie testowałem awk
wcześniej rozwiązania i naprawdę było mi bardzo źle, że je dostarczyłem. W każdym razie edytowana wersja odpowiedzi powinna działać (dzięki terdon za naprawienie) i przetestowałem również poniższe.
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
Jestem sort
na pierwszym polu, gdzie
- -n określa sortowanie numeryczne.
- -r określa odwrotny wynik sortowania.
- -k1,1 określa pierwsze pole do przeprowadzenia sortowania.
Teraz, po posortowaniu, przesyłam dane wyjściowe i po prostu otrzymuję pierwszy wynik, który da mi najwyższą liczbowo wartość kolumny 1 w wyniku.
Teraz w końcu podłączam do niego rurkę cut
z ogranicznikiem określonym jako spację i wypisuję -f3
zamierzony wynik.
Testowanie
cat filename
112030 /opt/oracle/app/oracle/product/11.2.0
121010 /opt/oracle/app/oracle/product/12.1.0
2312 /hello/some/other/path
3423232 /this/is/really/big/number
342 /ok/not/the/maximum/number
9999899 /Max/number
9767 /average/number
Teraz, po uruchomieniu powyższej komendy dla danych wejściowych jak powyżej, otrzymuję dane wyjściowe jako,
/Max/number
Możesz to zrobić za pomocą
AWK
.Tutaj pierwsza kolumna każdego wiersza jest porównywana ze zmienną
max
(która początkowo wynosi 0). Jeśli pierwsza kolumna ma wartość greated,max
a następnie druga kolumna jest przechowywana w zmiennejline
, jest to kontynuowane dla każdego wiersza pliku.Na końcu
END
reguły pliku jest wykonywana, aby wydrukowaćline
zmienną.źródło
źródło
sort -k1 -n filename | tail -1 | awk '{print $2}'
źródło
Po prostu możesz to posortować za pomocą
sort
poleceniaWynik:
źródło
cat
, sort może bezpośrednio pobierać pliki wejściowe.źródło