Команда сортировки Bash числовая сортировка, поля и сортировка по словарю

Не могли бы вы объяснить sort + 0nr -2 + 2d , пожалуйста? Этот пример взят из https://www.grymoire.com/Unix/Awk.html в комментарии говорится:

# numeric sort - biggest numbers first
# sort fields 0 and 1 first (sort starts with 0)
# followed by dictionary sort on fields 2 + 3

Пожалуйста, объясните каждый использованный аргумент.

Спасибо!

0
задан 8 August 2021 в 05:57

2 ответа

Это устаревший (или, по крайней мере, устаревший) «традиционный» синтаксис для указания значений полей и столбцов, описанный в info sort :

  В системах, не соответствующих POSIX 1003.1-2001, 'sort 'поддерживает 
традиционный синтаксис origin-zero' + POS1 [-POS2] 'для указания ключей сортировки. 
Традиционная команда' sort + AX ​​-B.Y 'эквивалентна' sort -k 
A + 1.X + 1, B ', если Y равно' 0 'или отсутствует, в противном случае это эквивалентно' sort -k 
A + 1.X + 1, B + 1. Y '. 
 

В приведенном вами примере:

sort +0nr -2 +2d

есть два набора спецификаторов: « +0 -2 » и « -2 » . Первый имеет A = 0 , B = 2 , Y отсутствует и, следовательно, эквивалентен -k0 + 1,2 , т.е. -k1,2 в современной индексации на основе 1. Второй имеет A = 2 с отсутствующими B и Y , поэтому становится просто -k3 .

Параметры букв имеют свое обычное значение, то есть

   -d, --dictionary-order
          consider only blanks and alphanumeric characters

   -n, --numeric-sort
          compare according to string numerical value

   -r, --reverse
          reverse the result of comparisons

, поэтому результатом будет обратная числовая сортировка в первых двух полях, -k1,2nr с последующей сортировкой по словарю в третьем (и следующих) полях -k3d .

На странице info не рекомендуется использовать эту форму синтаксиса:

  Сценарии, предназначенные для использования на стандартных хостах, должны избегать традиционного синтаксиса 
и должны использовать вместо него «-k». Например, избегайте «sort +2», поскольку 
может интерпретироваться как «sort ./+2» или «sort -k 3». Если ваш сценарий 
также должен выполняться на хостах, поддерживающих только традиционный синтаксис, 
он может использовать тест вроде 'if sort -k 1  / dev / null 2> & 1 ; затем 
 ... ’, чтобы решить, какой синтаксис использовать.
 
1
ответ дан 20 August 2021 в 10:28

это то же самое, что sort -k1,2nr -k3d .

0
ответ дан 20 August 2021 в 10:28

Другие вопросы по тегам:

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