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 содержит все числа.