Сортировка строк с числами и символами слов - PullRequest
2 голосов
/ 10 апреля 2011

Недавно я написал в Perl простую утилиту для подсчета слов в файле, чтобы определить его частоту, вот сколько раз он появляется.

Все хорошо, но я бы хотел отсортировать результат, чтобыэто легче читать.Пример вывода:

4:an
2:but
5:does
10:end
2:etc
2:for

Как видите, он упорядочен по слову, а не по частоте.Но с небольшой помощью :sort я мог бы реорганизовать это.При использовании n числа, такие как 10, идут в нужное место (даже если оно начинается с 1), плюс немного !, и порядок меняется на обратный, поэтому слово, которое появляется больше, является первым.*

Проблема в том, что когда число повторяется, оно сортируется по слову, что приятно, но помните, что порядок был обратным!

for -> etc -> but

Как это исправить?Придется ли мне использовать некоторые сценарии Vim для перебора каждой строки, проверяя, начинается ли она с предыдущего номера, и отмечая соответствующие строки, чтобы отсортировать их после изменения числа?

Ответы [ 2 ]

4 голосов
/ 10 апреля 2011
tac | sort -nr

делает это, поэтому выберите строки с помощью Shift + V и используйте!

2 голосов
/ 10 апреля 2011

Из vim :help sort:

The details about sorting depend on the library function used.  There is no
guarantee that sorting is "stable" or obeys the current locale.  You will have
to try it out.

В результате вы можете захотеть выполнить сортировку в своем скрипте Perl; не было бы трудно расширить ваш Perl sort, чтобы он был стабильным, см. perldoc sort для слишком большого количества деталей.

Если вы просто хотите решить эту проблему, вы можете заменить команду :sort на:

!sort -rn --stable (может быть проще всего использовать Shift-V, чтобы сначала визуально выделить строки, или использовать диапазон для сортировки, или что-то подобное, но если вы пишете сценарии vim, ничего из этого не будет быть новостью для вас.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...