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

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

10
4
66
....

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

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

10 голосов | спросил conradlee 13 PM00000010000003731 2012, 13:40:37

4 ответа


0

Попробуйте это:

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. Подробнее смотрите в комментариях.

ответил kev 13 PM00000010000005531 2012, 13:43:55
0
awk '{if($1>a)a=$1;}END{print a}' temp3
ответил Vijay 13 PM00000020000003631 2012, 14:03:36
0
 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.

ответил Sebi 13 PM00000010000002431 2012, 13:44:24
0

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

ответил Koushik Karmakar 22 PM00000040000003131 2014, 16:26:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132