Sortir berdasarkan kata yang dipisahkan koma

11

Perintah normal: sort dapat menyortir baris berdasarkan kolom atau kolom virtual ( \%catau \%v), dapatkah kolom logis level lebih tinggi digunakan sebagai kunci penyortiran? Menggunakan ekspresi reguler terlihat sedikit rumit untuk skenario ini (kolomnya ada di sekitar akhir baris?) Dan terlihat mirip dengan apa yang dilakukan utilitas sortir ( sork -k), tetapi mengurutkan dengan fungsi ini tidak tersedia di Windows. Plug-in Vim juga akan membantu.

Misalnya, saya ingin mengurutkan 2 baris di bawah ini sesuai dengan kolom terakhir yang dipisahkan oleh koma. Skenario saya yang sebenarnya memiliki lebih banyak kolom dan pola string. Tentukan pembatas kolom akan banyak menyederhanakannya.

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121
Thomson
sumber

Jawaban:

11

Jenis Vim memungkinkan Anda untuk melompati {pattern}, atau hanya mempertimbangkannya (dengan rbenderanya). Ekspresi reguler untuk kolom yang dibatasi koma terakhir mudah dirumuskan: Lewati semuanya sampai dan termasuk koma terakhir dalam sebuah baris:

:sort/.*,/

Untuk kolom lainnya, saya akan menggunakan rbendera, dan melewati N (di sini 2:) kolom sebelumnya melalui \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/
Ingo Karkat
sumber
1
Karena kolom terakhir adalah nomor heks menggunakan xbendera mungkin juga bermanfaat.
jecxjo
Ini terlihat hebat. Kolom terakhir mungkin merupakan kasus khusus. Adakah representasi sederhana untuk kolom tengah?
Thomson
Saya pikir Anda bisa membuat sesuatu untuk itu, tetapi di sini Anda. Harap terima jawaban saya (yang diedit) dengan mengklik tanda centang yang diuraikan di sebelahnya. Terima kasih!
Ingo Karkat