Tri basé sur des mots séparés par des virgules

11

Commande normale: le tri peut trier les lignes en fonction de la colonne ou de la colonne virtuelle ( \%cou \%v), la colonne logique de niveau supérieur pourrait-elle être utilisée comme clé de tri? L'utilisation d'une expression régulière semble un peu complexe pour ce scénario (la colonne se trouve à la fin de la ligne?) Et elle ressemble à ce que fait l'utilitaire de tri ( sork -k), mais le tri avec cette fonctionnalité n'est pas disponible sous Windows. Le plug-in Vim vous aidera également.

Par exemple, je voudrais trier les 2 lignes ci-dessous selon la dernière colonne séparée par une virgule. Mon scénario réel a beaucoup plus de colonnes et de modèles de chaînes. Spécifier le délimiteur de colonne le simplifiera beaucoup.

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121
Thomson
la source

Réponses:

11

Le tri de Vim vous permet soit de sauter {pattern}, soit de le considérer uniquement (avec le rdrapeau). Une expression régulière pour la dernière colonne délimitée par des virgules est facile à formuler: sautez tout jusqu'à et y compris la dernière virgule dans une ligne:

:sort/.*,/

Pour toute autre colonne, j'utiliserais le rdrapeau et sauterais N (ici 2:) colonnes précédentes via \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/
Ingo Karkat
la source
1
Étant donné que la dernière colonne est un nombre hexadécimal, l'utilisation du xdrapeau peut également être utile.
jecxjo
Ça a l'air génial. La dernière colonne peut être un cas particulier. Une représentation simple pour les colonnes du milieu?
Thomson
Je pensais que vous pouviez trouver quelque chose pour cela, mais vous y êtes. Veuillez accepter ma réponse (modifiée) en cliquant sur la coche indiquée à côté. Merci!
Ingo Karkat