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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.