sort (разница между опцией по умолчанию и числовой опцией -n)

Несколько check_commands вызываются с аргументом $HOSTADRESS в checkcommands.cfgв "стандартной" конфигурации, например:

/usr/lib/nagios/plugins/check_ping -H 10.1.1.2 -w 100.0,20% -c 500.0,60% -p 5
/usr/lib/nagios/plugins/check_nrpe -H 10.1.1.3 -c checkMEM -a ShowAll type=physical type=page type=virtual MaxWarn=90% MaxCrit=95%

Таким образом, фактический файл:

define command{
    command_name    check_nrpe
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Либо вы определяете здесь что-то вроде (не проверял):

define command{
    command_name    check_nrpe
    command_line    ssh $HOSTADDRESS$ "$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$"
}

Или вы пишете (очень) уродливый хак, создающий оболочку для пары команд, находящихся в /usr/lib/nagios/plugins/´, а именно /usr/lib/nagios/check_nrpe`, а затем делать отклонения в Debian.

Возможно, вам потребуется больше изменений, чем это; если вы используете nrpe поверх ssh или аналогичного, вам не понадобится SSL.

1
31.07.2017, 23:50
1 ответ

По умолчанию sortсортирует символ за символом, используя порядок сортировки, заданный локалью. Как правило, это довольно близко к порядку ASCII, но могут быть некоторые региональные различия. Со страницы руководства:

***  WARNING  ***  The  locale  specified  by the environment affects sort order.
Set LC_ALL=C to get the traditional sort order that uses native byte values.

Собственное значение байта обычно означает значение ASCII, поэтому цифры идут перед прописными буквами, которые идут перед строчными буквами. Но порядок по-прежнему посимвольный, поэтому 10предшествует 2, потому что 1предшествует 2.

Когда указана опция -nили --numeric-sort, ряды цифр обрабатываются как числа (, а не отдельные символы ), и сортируются в числовом порядке от наименьшего числа к наибольшему.

Документация не полностью описывает детали, поэтому здесь приведены правила флага -n, полученные экспериментально:

  1. Строки, начинающиеся с цифр, сортируются по числовому значению. (Сначала идут меньшие числа)
  2. Конечные символы в числовых строках не влияют на числовую часть, но конечные символы сортируются в алфавитно-цифровом порядке, если числовая часть одинакова.
  3. Строки, начинающиеся не с числа -, сортируются так, как если бы они были нулевыми, а затем по правилу 2.

Соблюдать:

$ printf %s\\n 2z 111 10 20b 20a aa2 aa10 | sort -n
aa10
aa2
2z
10
20a
20b
111

По правилу 3 строки aa10и aa2обрабатываются как нули и сортируются по оставшимся символам (, включая цифры, которые считаются символами ).

По правилу 2 строки 2z, 20aи 20bобрабатываются как числа, и завершающий символ вступает в силу только тогда, когда числа совпадают.

А по правилу 1 все строки, начинающиеся с цифры, сортируются по числовому значению.

Без флага -nсортировка выполняется посимвольно, где цифровые символы предшествуют буквенным. Соблюдайте:

$ printf %s\\n 2z 111 10 20b 20a aa2 aa10 | sort
10
111
20a
20b
2z
aa10
aa2
4
27.01.2020, 23:13

Теги

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