Comment trouver la valeur maximale dans la colonne 1 et faire écho à l'emplacement du chemin respectif à partir d'un fichier qui contient n nombre d'enregistrements.
$ cat version.log
112030 /opt/Oracle/app/Oracle/product/11.2.0
121010 /opt/Oracle/app/Oracle/product/12.1.0
Production attendue:
/opt/Oracle/app/Oracle/product/12.1.0
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, max
est défini sur la valeur du 1er champ et want
est défini sur la ligne actuelle. Lorsque le programme a traité l'intégralité du fichier, la valeur actuelle de want
est imprimée.
Modifier
Je n'ai pas testé la solution awk
plus tôt et c'était vraiment ma faute 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
ing sur le premier champ où,
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
avec le délimiteur spécifié comme espace et en imprimant le -f3
qui est la sortie prévue.
Test
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
Vous pouvez le faire avec AWK
.
$ awk '{if(max<$1){max=$1;line=$2}}END{print line}' file
/opt/Oracle/app/Oracle/product/12.1.0
Ici, la première colonne de chaque ligne est comparée à la variable max
(qui est initialement 0). Si la première colonne a une valeur supérieure à max
alors la deuxième colonne est stockée dans la variable line
, cela continue pour chaque ligne du fichier.
À la fin du fichier, la règle END
est exécutée pour imprimer la variable line
.
awk '$1 > max { max = $1; output = $2 } END { print output }' version.log
sort -k1 -n filename | tail -1 | awk '{print $2}'
Vous pouvez simplement le trier à l'aide de la commande sort
sort -r version.log | head -n1 | awk '{print $2}'
Production:
/opt/Oracle/app/Oracle/product/12.1.0