Как мне сортировать строки полулексографически в emacs - то есть лексикографически, за исключением того, что 3 сортируется выше 11? - PullRequest
5 голосов
/ 24 июня 2011

Как мне сортировать строки полулексографически в emacs - то есть, лексикографически, кроме того, что 3 сортируется выше 11? Например, у меня есть большая коллекция данных, каждая запись которых выглядит как

[ 5, 3, 21, 1600000 ],
[ 3, 11, 21, 6400000 ],
[ 3, 3, 102, 1600000 ],

и т.д ...

M-x sort-lines сортирует это как

[ 3, 11, 21, 6400000 ],
[ 3, 3, 102, 1600000 ],
[ 5, 3, 21, 1600000 ],

но мне бы очень хотелось, чтобы это сортировалось как

[ 3, 3, 102, 1600000 ],
[ 3, 11, 21, 6400000 ],
[ 5, 3, 21, 1600000 ],

Спасибо!

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Сехе дает хорошее решение .Вот в Emacs:

C-u M-| sort -k2n -k3n

Запустите его с выбранным регионом, и он будет заменен на sort output!

2 голосов
/ 24 июня 2011

С вашими данными следующее будет делать то, что вы хотите, хотя это немного трудоемко:

C-u 3 M-x sort-numeric-fields
C-u 2 M-x sort-numeric-fields

Не знаю точно, sort-numeric-fields - это стабильная сортировка , поэтому она не всегда может работать. И, очевидно, вышеупомянутые сортируют только 2 числа «по глубине», и вам нужно будет добавить C-u 4 M-x sort ... , если вы хотите отсортировать по 3-му числу. Префиксный аргумент начинается с 2, потому что первое поле - [, а подсчет начинается с 1.

Вы также можете бросить свой собственный вызов, позвонив sort-subr с соответствующим лексографическим предикатом. См. Документацию для sort-subr для получения более подробной информации.

2 голосов
/ 24 июня 2011

Я не использую emacs, но в vim я бы сделал:

%!sort -k2n -k3n

(возможно, используя и другие ключевые столбцы, я не могу сказать из примера)

Я не начинаю войну редакторов здесь ... Я просто уверен, что emacs позволяет вам фильтровать и команды оболочки, так что это поможет!

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