Sắp xếp dựa trên các từ được phân tách bằng dấu phẩy


11

Lệnh thông thường: sắp xếp có thể sắp xếp các dòng dựa trên cột hoặc cột ảo ( \%choặc \%v), cột logic cấp cao hơn có thể được sử dụng làm khóa sắp xếp không? Sử dụng biểu thức chính quy có vẻ hơi phức tạp cho kịch bản này (cột nằm ở cuối dòng?) Và nó trông giống như những gì tiện ích sắp xếp làm ( sork -k), nhưng sắp xếp với chức năng này không có sẵn trên Windows. Plug-in Vim cũng sẽ giúp.

Ví dụ: tôi muốn sắp xếp 2 dòng bên dưới theo cột cuối cùng được phân tách bằng dấu phẩy. Kịch bản thực sự của tôi có nhiều cột và mô hình chuỗi hơn. Chỉ định dấu phân cách cột sẽ đơn giản hóa nó rất nhiều.

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

Câu trả lời:


11

Sắp xếp của Vim cho phép bạn bỏ qua {pattern}hoặc chỉ xem xét nó (với rcờ). Một biểu thức chính quy cho cột được phân cách bằng dấu phẩy cuối cùng rất dễ hình thành: Bỏ qua mọi thứ cho đến khi và bao gồm dấu phẩy cuối cùng trong một dòng:

:sort/.*,/

Đối với bất kỳ cột nào khác, tôi sẽ sử dụng rcờ và bỏ qua 2các cột trước đó (ở đây :) thông qua \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/

1
Vì cột cuối cùng là số hex sử dụng xcờ cũng có thể hữu ích.
jecxjo

Điều này có vẻ tuyệt vời. Cột cuối cùng có thể là một trường hợp đặc biệt. Bất kỳ đại diện đơn giản cho các cột giữa?
Thomson

Tôi nghĩ rằng bạn đã có thể đưa ra một cái gì đó cho điều đó, nhưng bạn đang ở đây. Vui lòng chấp nhận câu trả lời (đã chỉnh sửa) của tôi bằng cách nhấp vào dấu kiểm được phác thảo bên cạnh. Cảm ơn!
Ingo Karkat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.