Не могли бы вы объяснить 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
Пожалуйста, объясните каждый использованный аргумент.
Спасибо!
Это устаревший (или, по крайней мере, устаревший) «традиционный» синтаксис для указания значений полей и столбцов, описанный в 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> / dev / null 2> & 1 ; затем ... ’, чтобы решить, какой синтаксис использовать.