Как отсортировать смешанный текст и числа (например, имена хостов)?

Вы уверены, что у вас есть abc_backups в корне вашей файловой системы? Я действительно сомневаюсь в этом (и даже если вы это сделали, это не очень хорошая практика). Также backup принимает 2 аргумента, а не один, как в вашем примере. Сначала источник (то, что вы делаете резервную копию), а затем место назначения. В соответствии с вашим описанием измените строку backup следующим образом:

резервный (скрытый) веб-сайт /

(который затем создаст резервную копию сервера веб-сайта 1.2.3.4 в папке / abc_backups / website / )

В случае сомнений вы всегда можете запустить rsnapshot с помощью -t , чтобы увидеть, какие команды он будет выполнять (не выполняя их на самом деле)

2
11.03.2016, 15:16
5 ответов

Если у вас GNU coreutils ≥ 7.0, вы можете использовать сортировку по версиям. Это лексикографический порядок, за исключением того, что последовательности цифр упорядочены в соответствии с их значением как целое число в десятичной системе счисления.

sort -V
5
27.01.2020, 21:51

Этот конкретный стиль ввода может быть успешно отсортирован с помощью

sort -t - -nk2,2

но он не очень подходит для всех видов имен файлов, если это то, что вы ищете.

2
27.01.2020, 21:51

Предполагая, что что угодно в вашем тексте может меняться, вам нужно использовать sort со следующими опциями:

-t, --field-separator=SEP использовать SEP вместо перехода от непустого к пустому

k, --key=POS1[,POS2] начинать ключ в POS1 (начало 1), заканчивать в POS2 (по умолчанию конец строки)

-V, --version-sort естественная сортировка (версий) номеров в тексте

sort -t "-" -k 2 -V < [filename]
1
27.01.2020, 21:51
sort -t- -k2n file

whatever-1.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org
0
27.01.2020, 21:51

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

sort -t- -k1,1 -k2,2

где:

-t-       divide the hostnames into fields using dash (-) rather than spaces
-k1,1     the first sort key is the first field (from 1 to 1), a normal sort
-k2,2     the second key is the second field using a numeric (n) sort
          (the field includes the ".example.org" but the numeric sort
          seems to cope find with the trailing non-number chars)

это дает результат:

blargh-1.example.org
    :
blargh-13.example.org
thingaroo-1.example.org
    :
thingaroo-17.example.org
whatever-1.example.org
    :
whatever-13.example.org
2
27.01.2020, 21:51

Теги

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