Sắp xếp tệp theo cột đầu tiên và sau đó là cột thứ hai


13

Làm cách nào tôi có thể thao tác một tệp văn bản được phân tách bằng hai cột bằng cách sắp xếp theo phần tử đầu tiên của cột thứ hai (chỉ khi phần tử cột đầu tiên giống nhau)?

Ví dụ:

Nhập tệp 1

A   1-2
A   6-8
A   3-4
B   7-10
B   5-9

Đầu ra dự kiến: Tệp 2

A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

Câu trả lời:


22

Sử dụng sort's -ktùy chọn để sắp xếp theo (nhiều) cột cùng một lúc:

$ sort -k1,1 -k2n input
A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

-k1,1sắp xếp theo cột đầu tiên, sau đó -k2ntheo cột thứ hai khi cột thứ nhất được buộc, để bạn có được đầu ra theo thứ tự bạn muốn: sắp xếp theo phần tử đầu tiên của cột thứ hai, chỉ khi phần tử cột đầu tiên giống nhau.

Khi sắp xếp số, nó sẽ chỉ kiểm tra trường cho đến khi nó dừng là một số, do đó sẽ cho bạn so sánh chỉ phần tử đầu tiên của nó.

Khi hai khóa so sánh giống nhau, sau đó sortso sánh các dòng đầy đủ theo từ vựng như một so sánh cuối cùng. Ví dụ trong A 1-10vs A 1-2, các khóa đầu tiên giống hệt nhau ( Achuỗi) và khóa thứ hai cũng vậy (cả hai đều được coi là số 1), do đó, sortso sánh A 1-10với từ A 1-2vựng và sau đó là lớn hơn khi 2sắp xếp sau 1. Việc triển khai GNU sortcó một -Vtùy chọn hoặc Vcờ khóa để thực hiện sắp xếp phiên bản , giống như so sánh từ vựng ngoại trừ các chuỗi các chữ số thập phân trong các chuỗi được so sánh bằng số, vì vậy sort -k1,1 -k2Vsẽ sắp xếp A 1-10sau A 1-210số lớn hơn 2.


Về mặt kỹ thuật, -k2có nghĩa là phần của dòng bắt đầu bằng trường thứ hai (sau khi chuyển đổi đầu tiên từ không trống sang trống) và kết thúc ở cuối dòng, nhưng với ncờ, tương đương với -k2,2nchỉ phần đầu tạo thành một số được xem xét.

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.