Das sollte funktionieren:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
Das -v max=0
setzt die Variable max
auf 0
, dann wird für jede Zeile das erste Feld mit dem aktuellen Wert von verglichen max
. Wenn es größer ist, max
wird auf den Wert des 1. Feldes gesetzt und want
auf die aktuelle Zeile gesetzt. Wenn das Programm die gesamte Datei verarbeitet hat, wird der aktuelle Wert von want
gedruckt.
Bearbeiten
Ich habe die awk
Lösung nicht früher getestet und es war wirklich schlecht, sie zur Verfügung gestellt zu haben. Wie auch immer, die bearbeitete Version der Antwort sollte funktionieren (danke an terdon für die Fehlerbehebung) und ich habe auch das Folgende getestet.
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
Ich bin sort
auf dem ersten Feld, wo,
- -n gibt die numerische Sortierung an.
- -r gibt an, dass das Sortierergebnis umgekehrt werden soll.
- -k1,1 gibt das erste Feld für die Sortierung an.
Nach dem Sortieren leite ich nun die Ausgabe weiter und erhalte nur das erste Ergebnis, das mir den numerisch höchsten Wert von Spalte1 im Ergebnis gibt.
Jetzt leite ich es cut
mit dem als Leerzeichen angegebenen Trennzeichen weiter und drucke das, -f3
was die beabsichtigte Ausgabe ist.
Testen
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
Nachdem ich den obigen Befehl für die Eingabe wie oben ausgeführt habe, erhalte ich die Ausgabe als
/Max/number