Shell script: найти максимальное значение в последовательности целых чисел без сортировки

У меня есть файл с длинным списком целых чисел:

10
4
66
....

Я хочу найти максимальное значение с помощью инструментов командной строки UNIX. Я знаю, что могу использовать sort (и действительно есть решения этой проблемы на SO, которые используют sort), но это неэффективно, требуя O (N * log (N)) и много памяти. С простой петлей я должен уметь находить максимальное значение в O (N) и пару байтов памяти.

Кажется, там должна быть какая-то программа (с именем вроде max), которое делает это из коробки --- это правда?

Ответ 1

Попробуйте следующее:

awk '$0>x{x=$0};END{print x}' input.txt

[ОБНОВЛЕНО:]

awk 'BEGIN{x=-2147483648};$0>x{x=$0};END{print x}' input.txt

Инициализация x позволяет правильному управлению целыми списками со значениями <= 0. См. комментарии для более подробной информации.

Ответ 2

awk '{if($1>a)a=$1;}END{print a}' temp3

Ответ 3

 max=1

 while read i
 do
  if [[ "$i" > "$max" ]]; then
     max="$i"
  fi
 done < a.txt

 echo "$max" > b.txt

a.txt - это входной файл (с целым числом в каждой строке). b.txt содержит максимум целых чисел в a.txt.

Ответ 4

sort -nr inputfile.txt | голова -1 где inputfile.txt содержит все числа.