Cela devrait fonctionner:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
Le -v max=0
définit la variable max
sur 0
, puis, pour chaque ligne, le premier champ est comparé à la valeur actuelle de max
. S'il est supérieur, il max
est défini sur la valeur du 1er champ et want
sur la ligne actuelle. Lorsque le programme a traité l'intégralité du fichier, la valeur actuelle de want
est imprimée.
Éditer
Je n'ai pas testé la awk
solution 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 sort
sur 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 cut
le délimiteur spécifié en tant qu'espace et en imprimant celui -f3
qui 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