Bonjour
Je cherche la meilleur manière de récupérer dans une colonne le nombre le plus grand et le plus petit
cat mon_fichier.txt | cut -d";" -f4 | sort -n
5
7
9
15
16
Si je fais:
cat mon_fichier.txt | cut -d";" -f4 | sort -n | tail -1
16
m'affiche le plus grand
si je fais:
cat mon_fichier.txt | cut -d";" -f4 | sort -r | tail -1
-r pour reverse
me donne 15
c'est pas bon
Sinon j'ai pensée a ça:
cat mon_fichier.txt | cut -d";" -f4 | sed '1,${$b;d}'
m'affiche : 5 le nombre le plus petit
cat mon_fichier.txt | cut -d";" -f4 | sed '1,${1b;d}'
m'affiche : 16 le nombre le plus grand
Ceci semble bien fonctionner mais j'ai des doutes car si dans ma colonne il y a un caractère blanc
tout devient faux.
il faudrait si y a un caractère blanc de prendre que les chiffres ou alors de le remplacer par zéro.
Quelqu'un a une petite idée ?
D'avance merci pour toutes réponses.
# UUOC
Posté par Tonton Th (Mastodon) . Évalué à 4. Dernière modification le 03 novembre 2015 à 12:11.
Cinq d'un coup, joli score…
Ceci dit, il ne manque pas une option
-n
quelque part ?# man head; man tr
Posté par HSimpson . Évalué à 1.
tout est dans le titre
Je sais, c'est facile quand on sait quoi chercher
# avec awk
Posté par totof2000 . Évalué à 3. Dernière modification le 03 novembre 2015 à 12:25.
En supposant que tu veux appliquer l'expressiion sur le 4eme champ :
Tu remplace $4 par $numero_du_champ que tu veux traiter.
[^] # Re: avec awk
Posté par totof2000 . Évalué à 3. Dernière modification le 03 novembre 2015 à 12:32.
Encore mieux :
dans l'appel de awk, tu passe la variable field=no_de_colonne(ici je recherche le max sur la 2eme colonne)
mon fichier toto.txt contient :
L'exécution donne :
[^] # Re: avec awk
Posté par Ignatz Ledebur . Évalué à 4.
Il veut aussi le nombre le plus petit et le séparateur de champ est visiblement un point-virgule avec éventuellement des espaces autour. Dans la même idée, on peut tenter:
[^] # Re: avec awk
Posté par totof2000 . Évalué à 2.
Je ne voulais pas donner la solution "tout cuit" :) mais effectivement c'est ce que j'avais en tête (à la différence près du BEGIN+getline par rapport à mon test sur NR).
[^] # Re: avec awk
Posté par totirus . Évalué à 1.
Bonjour,
Merci cette solution est bonne.
awk -v field=2 'NR == 1 {max=$field} {if (max < $field) {max=$field}}END {print max}' toto.txt
Merci à tous pour vos réponses.
# the man you must read, LUKE
Posté par NeoX . Évalué à 5. Dernière modification le 03 novembre 2015 à 13:04.
parce que ton classement n'est plus "numerique" car tu as enlevé le -n à sort.
pourrait donner le resultat attendu
sinon tu gardes la ligne de depart,
mais tu prend la premiere (head) au lieu de la derniere (tail)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.