2011-03-05 40 views
16

Tôi có một tập tin, cho phép nói "BIGFILE", với dữ liệu bảng của mẫu dưới đây,Làm thế nào để sắp xếp theo hai trường (một số, một chuỗi) cùng một lúc bằng cách sử dụng chương trình "sắp xếp" được tích hợp?

a1 b2 a3 1
b1 a2 c3 0
... và vân vân.

Tôi muốn sử dụng chương trình "sắp xếp" tích hợp trên máy Linux để sắp xếp tệp này theo trường thứ tư (số) và sau đó là trường đầu tiên cùng một lúc. Tôi đã trải qua những trang người đàn ông một vài lần và tất cả tôi có thể đưa ra là,

sort -n -k4,4 -k1,1 bigfile 

Có cách nào để làm cho "loại" làm những gì tôi muốn hoặc tôi phải viết chương trình tùy chỉnh của riêng tôi?

Cảm ơn bạn.

+0

điều gì đã xảy ra với -k4? – Orbit

+0

Điều đó không hoạt động? – Zimbabao

+3

@Orbit, tôi tin rằng '-k4' chỉ * bắt đầu * một khóa ở cột 4. Nhưng phần cuối của khóa không được chỉ định và do đó, chìa khóa sẽ đi đến hết. Vì vậy, '-k4 -k1', thực sự là một cái gì đó giống như' -k4 -k5 -k6 -k7 -k1', và do đó '-k1' là kinda vô nghĩa. (Vâng, nó thực sự phản trực giác, nhưng về cơ bản bạn nên luôn luôn làm '-kX, X' cho mọi trường –

Trả lời

27

Từ manpage:

POS là F [.C] [TÙY_CHỌN], trong đó F là số lĩnh vực và C vị trí nhân vật trong lĩnh vực này; cả hai đều có nguồn gốc 1. Nếu không phải -t hoặc -b là có hiệu lực, ký tự trong một trường được tính từ sự bắt đầu của khoảng trắng trước đó. OPTS là một hoặc nhiều tùy chọn đặt hàng một chữ cái, ghi đè tùy chọn đặt hàng toàn cầu cho khóa đó. Nếu không có khóa nào, hãy sử dụng toàn bộ dòng làm khóa.

sort -k4,4n -k1,1 bigfile nên làm điều đó.

Một tùy chọn khác sẽ là sort -k1,1 bigfile | sort --stable -n -k4,4 Loại ổn định có nghĩa là các mối quan hệ trên trường thứ 4 được giải quyết theo vị trí ban đầu, được đặt theo đường đầu tiên sắp xếp thành trường đầu tiên.

+2

Vâng. – Vijay

Các vấn đề liên quan