Sortuj według słów oddzielonych przecinkami

11

Normalne polecenie: sortowanie może sortować wiersze na podstawie kolumny lub kolumny wirtualnej ( \%club \%v), czy można użyć kolumny logicznej wyższego poziomu jako klucza sortowania? Użycie wyrażenia regularnego wydaje się nieco skomplikowane w tym scenariuszu (kolumna znajduje się na końcu wiersza?) I wygląda podobnie jak narzędzie sortowania ( sork -k), ale sortowanie z tą funkcją jest niedostępne w systemie Windows. Pomocna będzie również wtyczka Vima.

Na przykład chciałbym posortować 2 wiersze poniżej według ostatniej kolumny oddzielonej przecinkiem. Mój prawdziwy scenariusz ma znacznie więcej kolumn i ciąg znaków. Określ separator kolumny znacznie go uprości.

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121
Thomson
źródło

Odpowiedzi:

11

Sortowanie Vima pozwala albo pominąć {pattern}, albo tylko rozważyć (z rflagą). Wyrażenie regularne dla ostatniej kolumny rozdzielanej przecinkami jest łatwe do sformułowania: Pomiń wszystko aż do ostatniego przecinka w wierszu:

:sort/.*,/

W przypadku każdej innej kolumny użyłbym rflagi i pomijałem N (tutaj 2:) poprzednie kolumny przez \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/
Ingo Karkat
źródło
1
Ponieważ ostatnia kolumna okazuje się być liczbą szesnastkową, użycie xflagi może być również pomocne.
jecxjo
To wygląda świetnie. Ostatnia kolumna może być przypadkiem specjalnym. Jakieś proste przedstawienie środkowych kolumn?
Thomson
Myślałem, że możesz coś wymyślić, ale proszę bardzo. Zaakceptuj moją (edytowaną) odpowiedź, klikając zaznaczony symbol zaznaczenia obok niej. Dzięki!
Ingo Karkat