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

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[^,]*/

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.