Нахождение максимума значений в файле

Возможно, необходимо установить libpurple-dev с apt-get. Это должно решить эту проблему.

6
19.05.2014, 08:55
10 ответов
[1168268]Используя

List::Util

(часть стандартной библиотеки с 5. 8, иначе доступно на CPAN):

7
27.01.2020, 20:20
[1168342] Другие ответы довольно хороши, и Perl / awk - это путь.

Просто для развлечения, вы также можете использовать это (предполагая, что GNU [1168661]grep[1168662]):

Объяснение

grep -Eo '[0-9]+' file[1168920] распечатывает все совпадения положительных десятичных целых чисел в файле. Каждое совпадение будет выведено в отдельной строке, в соответствии с флагом [1168921]-o[1168922].

сортировка -rn[1168924] сортирует список в числовом и обратном порядке, так, чтобы первое число было наибольшим. Головка -n 1[1168926] печатает первую строку.

Пошагово:

19
27.01.2020, 20:20
[1168254]Я знаю, что это не perl:

8
27.01.2020, 20:20
[1168270]Другое решение [1168610]perl[1168611]:

Это сработает с файлом, содержащим одну строку, если у вас в файле есть многострочная, и вы хотите найти максимальное значение по всем строкам, попробуйте:

6
27.01.2020, 20:20
[1168306]Это работает в Ubuntu, но не в MacOS:
  • Сначала grep для шаблонов, совпадающих с числом (добавьте ., если у вас есть десятичные числа), затем отсортируйте цифры в обратном порядке, а затем выберите первый результат.[1168309].
  • 3
    27.01.2020, 20:20
    [1132024]Вот более быстрый Perl-подход, который не требует сортировки:

    или, как предложил @Gnouc в комментариях:

    3
    27.01.2020, 20:20
    [1168362]Нет необходимости в awk, grep или perl.

    1
    27.01.2020, 20:20
    grep '[0-9]*' number.sh | sort -rn | head -1
    
    -1
    27.01.2020, 20:20

    Если вы хотите поддерживать различные типы чисел (-2, 1E-20, inf, 0x2f, 0b0101, 0777.... ), а не только положительные десятичные целые числа, можно сделать:

    perl -lne '
      while (m{(?!<\w)(?:(0x[0-9a-f]+|
                0b[01]+|
                0[0-7]+)|
               [-+]?(\d+(\.\d*)?|\.\d+)(e[-+]?\d+)?|
               infinity|inf)(?!\w)}xgi) {
        $v = defined($1) ? oct($1) : $&;
        $m = $& unless defined($m) && $m >= $v
      }
      END {print $m if defined $m}'
    
    2
    27.01.2020, 20:20

    Да, это не perl, но мне нравится GNU awk для этой

    awk -v RS='[[:space:]]+' 'BEGIN{max=-inf};{max = $0>max? $0: max};END{print max}' file
    63
    
    0
    27.01.2020, 20:20

    Теги

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