Ho un file con una lunga lista di numeri interi:script di shell: trovare il valore massimo in una sequenza di numeri interi senza ordinare
10
4
66
....
voglio trovare il valore massimo utilizzando gli strumenti della riga di comando UNIX. So che posso usare sort
(e in effetti ci sono soluzioni a questo problema su SO che usano sort
), ma questo è inefficiente, richiede O (N * log (N)) e molta memoria. Con un ciclo for semplice, dovrei essere in grado di trovare il valore massimo in O (N) e un paio di byte di memoria.
Sembra che ci sia qualche programma là fuori (con un nome come max
) che lo faccia fuori dalla scatola --- è vero?
Buono! Notare che ';' prima di 'END' non è necessario. – fedorqui
Un posto dove questo fallisce. Se l'elenco di numeri interi ha solo un valore e tale valore è 0. L'output finisce vuoto. In realtà. Se hai una lista di valori singoli in cui il valore è <= 0, è vuoto. Quindi, i negativi non funzioneranno o apparirà. In realtà ... i negativi non funzionano affatto con questo (valore singolo o no). – stuckj
In seguito a ulteriori indagini, ciò non riesce se gli unici valori nell'elenco sono <= 0 poiché non si inizializza x. Puoi risolvere ciò con 'awk 'BEGIN {x = <>}; $ 0> x {x = $ 0}; END {print x}'' dove <> è un numero davvero negativo. Ad esempio, 'awk 'BEGIN {x = -2147483648}; $ 0> x {x = $ 0}; END {print x}'' assumendo una versione di awk compilata con valori a 32 bit per variabili. –
stuckj