У меня есть каталог, полный текстовых файлов с тегами в первой строке, и я хочу получить список тегов и их частоту. Я извлек теги и отсортировал их в большой список; допустим, это выглядит так:

apple
banana
banana
banana
banana
orange
orange
kumquat
pomegranate
pineapple
pineapple
pineapple

Затем я передаю его через uniq -c чтобы преобразовать его в список с числом:

      1 apple
      4 banana
      2 orange
      1 kumquat
      1 pomegranate
      3 pineapple

Я бы сейчас хотел бы отсортировать его, первым номером в обратном порядке (наибольшее число первых), а затем в алфавитном порядке форвардов. Я пытаюсь сделать это, пропустив через sort -bnr (игнорируя начальные пробелы, числовую сортировку в обратном порядке), но -r применяется к буквенной части:

      4 banana
      3 pineapple
      2 orange
      1 pomegranate
      1 kumquat
      1 apple

Я думал об опции -k для сортировки по нескольким полям, о которой я только что узнал на днях, но похоже, что обращение нельзя применить отдельно для разных опций -k (возможно, это просто выводит результат через tac или что-то в этом роде). ?). Передача через второй sort не работает, потому что он игнорирует предыдущий и снова смешивает числовую часть.

В идеале решение все равно будет использовать sort и uniq , но я открыт для переключения на другой инструмент, если это необходимо. Однако это может закончиться сценарием, поэтому решение, требующее интерактивных инструментов, отсутствует.

1 ответ1

0

К сожалению, уже нашли ответ, потому что я начал случайный просмотр элементов в "связанной" боковой панели! Оказывается, вы можете использовать параметры после спецификаторов полей, чтобы применять их только к этому полю - я прочитал эту часть справочной страницы, но, очевидно, не очень внимательно читал, потому что я пропустил:

OPTS - это одна или несколько однобуквенных опций заказа [bdfgiMhnRrV], которые переопределяют глобальные опции заказа для этого ключа. Если ключ не указан, используйте всю строку в качестве ключа.

Заключительная команда:

sort -bk 1rn -k 2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .