Cela devrait fonctionner:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
Le -v max=0définit la variable maxsur 0, puis, pour chaque ligne, le premier champ est comparé à la valeur actuelle de max. S'il est supérieur, il maxest défini sur la valeur du 1er champ et wantsur la ligne actuelle. Lorsque le programme a traité l'intégralité du fichier, la valeur actuelle de wantest imprimée.
Éditer
Je n'ai pas testé la awksolution plus tôt et c'était vraiment mon mal de l'avoir fournie. Quoi qu'il en soit, la version éditée de la réponse devrait fonctionner (merci à terdon de l'avoir corrigée) et j'ai également testé ce qui suit.
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
Je suis sortsur le premier champ où,
- -n spécifie le tri numérique.
- -r spécifie inverser le résultat du tri.
- -k1,1 spécifie le premier champ pour le tri.
Maintenant, après le tri, je passe la sortie et j'obtiens juste le premier résultat qui me donnera la valeur numériquement la plus élevée de column1 dans le résultat.
Maintenant, je l'ai finalement dirigé vers cutle délimiteur spécifié en tant qu'espace et en imprimant celui -f3qui est la sortie prévue.
Essai
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
Maintenant, après avoir exécuté la commande ci-dessus pour l'entrée comme ci-dessus, j'obtiens la sortie comme,
/Max/number