Mam plik z długiej listy liczb całkowitych:Shell skrypt: znaleźć maksymalną wartość w sekwencji liczb całkowitych bez sortowania
10
4
66
....
Chcę znaleźć maksymalną wartość przy użyciu narzędzi wiersza polecenia UNIX. Wiem, że mogę użyć sort
(i rzeczywiście są rozwiązania tego problemu na SO, które używają sort
), ale to nieefektywne, wymagające O (N * log (N)) i mnóstwo pamięci. Z prostą pętlą for, powinienem być w stanie znaleźć maksymalną wartość w O (N) i parę bajtów pamięci.
Wygląda na to, że musi istnieć jakiś program (o nazwie takiej jak max
), który robi to po wyjęciu z pudełka --- czy to prawda?
Dobra! Zauważ, że ';' zanim 'END' nie jest potrzebny. – fedorqui
Jedno miejsce, w którym to się nie powiedzie. Jeśli lista liczb całkowitych ma tylko jedną wartość, a ta wartość to 0. Twoje dane wyjściowe są puste. Tak właściwie. Jeśli masz jedną listę wartości o wartości <= 0, jest ona pusta. Negatywy nie będą działać, albo się pojawią. Właściwie ... negatywy w ogóle nie działają z tym (pojedyncza wartość lub nie). – stuckj
Po dalszych badaniach nie powiedzie się, jeśli jedynymi wartościami na liście są <= 0, ponieważ nie zainicjowano x. Możesz rozwiązać ten problem, używając 'awk 'BEGIN {x = <>}; 0 0> x {x = 0 0}; END {print x}'' gdzie <> jest naprawdę liczbą ujemną. Np .: 'awk 'BEGIN {x = -2147483648}; 0 0> x {x = 0 0}; END {print x}'' przy założeniu wersji awk skompilowanej z 32-bitowymi wartościami dla zmiennych. –
stuckj