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

11

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

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

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121
Thomson
источник

Ответы:

11

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

:sort/.*,/

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

:sort/\([^,]*,\)\{2}\zs[^,]*/
Инго Каркат
источник
1
Так как последний столбец случается шестнадцатеричное число , используя xфлаг также может быть полезным.
jecxjo
Это выглядит великолепно. Последний столбец может быть особым случаем. Любое простое представление для средних колонн?
Томсон
Я думал, что вы могли придумать что-то для этого, но вот вы здесь. Пожалуйста, примите мой (отредактированный) ответ, нажав на отмеченную галочку рядом с ним. Спасибо!
Инго Каркат