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.