Рейтинг:0

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

флаг dk

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

# числовая сортировка - сначала самые большие числа
# сначала сортируем поля 0 и 1 (сортировка начинается с 0)
# с последующей сортировкой по словарю по полям 2 + 3

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

Спасибо!

флаг hr
Насколько я знаю, этот синтаксис устарел - см., например, [Ошибка «сортировка: невозможно прочитать: +1: нет такого файла или каталога»] (https://unix.stackexchange.com/a/486729/65304)
Logan Lee avatar
флаг dk
@steeldriver, да, но вы все равно можете объяснить, что они означают?
waltinator avatar
флаг it
Прочтите `man sort` и `info sort`.
Рейтинг:1
флаг hr

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

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

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

сортировать +0nr -2 +2d

есть два набора спецификаторов: "+0 -2" и "-2". У первого есть А=0, В=2, Д отсутствует и, следовательно, эквивалентен -k0+1,2 то есть -к1,2 в современной индексации на основе 1. Второй имеет А=2 с обоими Б и Д отсутствует, поэтому становится просто -k3.

Варианты букв имеют свои обычные значения, т.е.

   -d, --словарь-порядок
          учитывать только пробелы и буквенно-цифровые символы

   -n, --числовая сортировка
          сравнить по числовому значению строки

   -р, --обратный
          обратить результат сравнения

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

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

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

это то же самое, что сортировать -k1,2nr -k3d.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.