Classificar com base em palavras separadas por vírgula

11

Comando normal: sort pode classificar linhas com base na coluna ou coluna virtual ( \%cou \%v), a coluna lógica de nível superior pode ser usada como chave de classificação? O uso de expressão regular parece um pouco complexo para esse cenário (a coluna está no final da linha?) E é semelhante ao que o utilitário de classificação faz ( sork -k), mas a classificação com essa funcionalidade não está disponível no Windows. O plug-in Vim também ajudará.

Por exemplo, eu gostaria de classificar as 2 linhas abaixo de acordo com a última coluna separada por vírgula. Meu cenário real tem muito mais colunas e padrão de string. Especificar delimitador de coluna simplificará muito.

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

Respostas:

11

A classificação do Vim permite que você pule {pattern}ou considere apenas (com a rbandeira). É fácil formular uma expressão regular para a última coluna delimitada por vírgula: Ignore tudo até e incluindo a última vírgula em uma linha:

:sort/.*,/

Para qualquer outra coluna, eu usaria a rflag e pular N (aqui 2:) colunas anteriores via \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/
Ingo Karkat
fonte
1
Como a última coluna é um número hexadecimal, o xsinalizador também pode ser útil.
Jecxjo # 22/15
Isso parece ótimo. A última coluna pode ser um caso especial. Alguma representação simples para as colunas do meio?
Thomson
Eu pensei que você fosse capaz de pensar em algo para isso, mas aqui está você. Aceite minha resposta (editada) clicando na marca de seleção descrita ao lado. Obrigado!
Ingo Karkat