Shell script: trouver le maximum de la valeur dans une séquence d'entiers sans tri
J'ai un fichier avec une longue liste d'entiers:
10
4
66
....
Je veux trouver la valeur maximale à l'aide de la ligne de commande UNIX outils. Je sais que je peux utiliser sort
(et en effet, il existe des solutions à ce problème, AFIN que l'utilisation sort
), mais c'est inefficace, nécessitant O(N*log(N)) et beaucoup de mémoire. Avec une simple boucle for, je devrais être capable de trouver la valeur maximale en O(N) et un couple d'octets de mémoire.
Il semble que il doit y avoir un programme (avec un nom comme max
) qu'est-ce à la sortie de la boîte---est-ce vrai?
OriginalL'auteur conradlee | 2012-08-13
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
[Mis à JOUR:]
Initialisation de x permet à la solution de gérer correctement les listes d'entiers avec des valeurs <= 0. Voir les commentaires pour plus de détails.
;
avantEND
n'est pas nécessaire.Un lieu où il échoue. Si vous avez liste de nombres entiers n'a qu'une valeur et cette valeur est de 0. Votre sortie se termine vide. En fait. Si vous avez une seule liste de valeur où la valeur est <=0, elle est vide. Ainsi, les négatifs ne fonctionne pas, soit il s'affiche. En fait...négatifs ne fonctionne pas du tout avec cette (seule valeur ou pas).
Après enquête, il échoue si les seules valeurs dans votre liste <= 0 puisque vous n'avez pas initialiser x. Vous pouvez résoudre ce avec
awk 'BEGIN{x=<<MIN_INT>>};$0>x{x=$0};END{print x}'
où <<MIN_INT>> est vraiment de nombre négatif. E. g.,awk 'BEGIN{x=-2147483648};$0>x{x=$0};END{print x}'
en supposant un awk version compilée avec des valeurs de 32 bits pour les variables.OriginalL'auteur kev
OriginalL'auteur Vijay
a.txt est le fichier d'entrée(avec un entier sur chaque ligne).
b.txt contient le maximum des entiers a.txt.
>
et<
sont pour lexicale tri dans les tests. Utilisation(())
oulet
dans les coquilles qui les soutiennent, ou[ n -gt m ]
pour POSIX scripts. Aussi, utilisez toujoursread -r
. Aussi, vous avez probablement destiné àmax=$i
.OriginalL'auteur Sebi
sort-nr inputfile.txt | head -1
où inputfile.txt contient tous les nombres.
OriginalL'auteur Koushik Karmakar