Ordenar según palabras separadas por comas

11

Comando normal: ordenar puede ordenar líneas basadas en una columna o columna virtual ( \%co \%v), ¿podría usarse la columna lógica de nivel superior como clave de clasificación? El uso de la expresión regular parece un poco complejo para este escenario (¿la columna está al final de la línea?) Y se parece a lo que hace la utilidad de clasificación ( sork -k), pero la clasificación con esta funcionalidad no está disponible en Windows. El complemento Vim también ayudará.

Por ejemplo, me gustaría ordenar las 2 líneas a continuación según la última columna separada por comas. Mi escenario real tiene muchas más columnas y patrones de cadena. Especificar delimitador de columna lo simplificará mucho.

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

Respuestas:

11

La ordenación de Vim le permite omitir {pattern}o solo considerarlo (con la rbandera). Es fácil formular una expresión regular para la última columna delimitada por comas: omita todo hasta e incluyendo la última coma en una línea:

:sort/.*,/

Para cualquier otra columna, usaría la rbandera y omitiría N (aquí 2:) columnas anteriores a través de \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/
Ingo Karkat
fuente
1
Dado que la última columna es un número hexadecimal usando la xbandera también podría ser útil.
jecxjo
Esto se ve genial. La última columna puede ser un caso especial. ¿Alguna representación simple para las columnas del medio?
Thomson
Pensé que eras capaz de encontrar algo para eso, pero aquí estás. Acepte mi respuesta (editada) haciendo clic en la marca de verificación que se encuentra al lado. ¡Gracias!
Ingo Karkat