Tengo un archivo con una larga lista de números enteros:Shell script: encontrar el valor máximo de una secuencia de números enteros sin clasificar
10
4
66
....
Quiero encontrar el valor máximo utilizando herramientas de línea de comandos UNIX. Sé que puedo usar sort
(y de hecho hay soluciones para este problema en SO que usan sort
), pero eso es ineficiente, requiere O (N * log (N)) y mucha memoria. Con un bucle for simple, debería ser capaz de encontrar el valor máximo en O (N) y un par de bytes de memoria.
Parece que debe haber algún programa por ahí (con un nombre como max
) que lo hace de la caja --- ¿es cierto?
¡Bueno! Tenga en cuenta que ';' antes de 'END' no es necesario. – fedorqui
Un lugar donde esto falla. Si la lista de enteros tiene solo un valor y ese valor es 0. Su salida termina en blanco. Actualmente. Si tiene una sola lista de valores donde el valor es <= 0, está en blanco. Entonces, los negativos no funcionarán, o eso parece. En realidad ... los negativos no funcionan en absoluto con esto (valor único o no). – stuckj
Tras una investigación adicional, esto falla si los únicos valores en su lista son <= 0 ya que no inicializa x. Puede resolver eso con 'awk 'BEGIN {x = <>}; $ 0> x {x = $ 0}; END {imprimir x}' 'donde <> es un número realmente negativo. Por ejemplo, 'awk 'BEGIN {x = -2147483648}; $ 0> x {x = $ 0}; END {print x}'' suponiendo una versión de awk compilada con valores de 32 bits para las variables. –
stuckj