Команда сортировки -по месяцам не работает?

Добавление этого в sesman.ini под [Xvnc] решило мою проблему!

param8=-SecurityTypes
param9=None 

$sudo nano /etc/xrdp/sesman.ini

Найдите добавленный мною параметр

param8=-SecurityTypes
param9=None

Затем запустите:

$sudo service xrdp restart

После того, как я смог войти в систему и успешно подключиться.

3
05.02.2021, 23:49
6 ответов

Кажется, что указание модификатора Mв keydef сбрасывает модификатор rдля этого keydef, поэтому вместо этого вам нужно указать для него Mr. Это не очень очевидно в руководстве, поэтому неудивительно, что вы столкнулись с этой проблемой.

+ sort -r -t- -k2.1,2.3Mr
[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]
[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]
1
18.03.2021, 22:32

Чтобы применить «реверс» только к данному столбцу, укажите его после и-k:

sort -t- -k2.1,2.3Mr
#                  ~
8
18.03.2021, 22:32

Используйте реверс -rв ключе, который вы хотите инвертировать, но попробуйте это, чтобы получить желаемый результат. Вместо того, чтобы играть со сложными sort, давайте усложним это, превратив строки в соответствующий формат даты, затем отсортировав, а затем вернувшись к исходному формату:

printf "%s\n" "${sorted[@]}" | \
  awk -F'-' '{ print $1" " tolower($2)" "$3" "$4":"$5":"$6 }' | \ # 04 feb 2021 21:05:48
  xargs -I {} date -d {} +"%Y-%m-%d %H:%M:%S" | \ # 2021-02-04 21:05:48
  sort -k1r | \
  xargs -I {} date -d {} +"[%d-%b-%Y-%H-%M-%S]"

Выход:

[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]
[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]
7
18.03.2021, 22:32

Немного перла:

printf '%s\n' "${arr[@]}" \
| perl -MTime::Piece -lne '
    $t = Time::Piece->strptime($_, "%d-%b-%Y-%H-%M-%S");
    push @dates, [$t, $_];
    END {print for map {$_->[1]} sort {$b->[0] <=> $a->[0]} @dates}
  '
5
18.03.2021, 22:32

Как указал @ilkkachu, начальная и конечная позиция каждой клавиши по умолчанию является первой и конечной позицией, поэтому в моем случае их можно опустить, поэтому -k3,3rвместо -k3.1,3.4r.

Решение @choroba sort -t- -k2.1,2.3Mrоказалось наиболее полезным для меня в решении моей проблемы. Действительно, при сортировке по полю месяца кажется необходимым включить -r в ключ...так sort -t- -k2,2Mr, но неsort -r -t- -k2,2M

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

sort -t- -k3,3nr -k2,2Mr -n -r

За исключением того, что я не думаю, что -rнужен в ключе для года -k3,3nr. Как упоминал @Toby Speight, кажется, что -rнеобходим в ключе для месяца -k2,2Mr, потому что указание модификатора Mв keydef сбрасывает модификатор rдля этого keydef. Поэтому для сортировки временных меток по убыванию необходимо указать -r«глобально», а также Mrдля определения ключа месяца.

Рассмотрев все полезные ответы и проведя еще несколько тестов, я обнаружил, что в моем случае нет необходимости указывать числовую сортировку, и действительно достаточно сортировать только по году -k3,3и месяцу -k2,2Mr:

sort -r -t- -k3,3 -k2,2Mr
1
18.03.2021, 22:32
sort -t = -k 2.9nr -k 2.5Mr -k 2.2nr -k 2.14,2.21r
0
21.03.2021, 13:41

Теги

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