Сортировать на основе слов, разделенных запятыми


11

Обычная команда: sort может сортировать строки на основе столбца или виртуального столбца ( \%cили \%v), может ли логический столбец более высокого уровня использоваться в качестве ключа сортировки? Использование регулярного выражения выглядит немного сложнее для этого сценария (столбец находится в конце строки?) И похоже на то, что делает утилита сортировки ( sork -k), но сортировка с этой функциональностью недоступна в Windows. Плагин Vim также поможет.

Например, я хотел бы отсортировать 2 строки ниже по последнему столбцу, разделенному запятой. В моем реальном сценарии гораздо больше столбцов и шаблонов строк. Укажите столбец-разделитель, это сильно упростит его.

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121

Ответы:


11

Сортировка Vim позволяет вам либо пропустить {pattern}, либо только рассмотреть его (с rфлагом). Регулярное выражение для последнего столбца, разделенного запятыми, легко сформулировать: пропустите все до последней запятой в строке, включая последнюю:

:sort/.*,/

Для любого другого столбца я бы использовал rфлаг и пропустил N (здесь:) 2предыдущих столбцов через \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/

1
Так как последний столбец случается шестнадцатеричное число , используя xфлаг также может быть полезным.
jecxjo

Это выглядит великолепно. Последний столбец может быть особым случаем. Любое простое представление для средних колонн?
Томсон

Я думал, что вы могли придумать что-то для этого, но вот вы здесь. Пожалуйста, примите мой (отредактированный) ответ, нажав на отмеченную галочку рядом с ним. Спасибо!
Инго Каркат
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.