Linux shell sắp xếp tệp theo cột thứ hai?


Câu trả lời:


153

Nếu đây là UNIX:

sort -k 2 file.txt

Bạn có thể sử dụng nhiều -kcờ để sắp xếp trên nhiều cột. Ví dụ: để sắp xếp theo họ, sau đó đến tên làm ngắt dây:

sort -k 2,2 -k 1,1 file.txt

Các tùy chọn có liên quan từ "man sort":

-k, --key = POS1 [, POS2]

bắt đầu khóa tại POS1, kết thúc khóa tại POS2 (điểm gốc 1)

POS là F [.C] [OPTS], trong đó F là số trường và C là vị trí ký tự trong trường. OPTS là một hoặc nhiều tùy chọn đặt hàng gồm một chữ cái, sẽ ghi đè các tùy chọn đặt hàng toàn cầu cho khóa đó. Nếu không có khóa nào được cung cấp, hãy sử dụng toàn bộ dòng làm khóa.

-t, - trường-phân tách = SEP

sử dụng SEP thay vì chuyển tiếp không trống sang trống


2
Chỉ cần cẩn thận một chút khi sử dụng --field-separator=','nếu bạn có thể có toán tử nhập dữ liệu nhập các giá trị cho "First name" như "Billy Bob" hoặc bất cứ thứ gì ... khoảng trắng có thể dễ dàng xâm nhập vào dữ liệu của bạn nếu bạn không đề phòng nó, nhưng dấu phẩy tương đối khó xảy ra.
Tony Delroy

1
Có rất nhiều trường hợp có dấu phẩy trong các trường đó, như "Smith, Jr." hoặc "McDowell, Sr." hoặc "Dr. John" hoặc "New York, NY"
jbnunn

2
Lưu ý rằng nếu các cột được căn chỉnh trực quan, tức là có một số lượng không đổi giữa mỗi trường, bạn phải sử dụng -btùy chọn. Điều này là do sortthực sự đang xem xét rằng chuỗi để sắp xếp bắt đầu ngay sau dấu phẩy chứ không phải từ chữ cái đầu tiên của cột. Ngoài ra, bạn có thể cần phải đặt trước lệnh bằng LC_ALL=C, để tránh bất kỳ tác dụng phụ nào do ngôn ngữ, điều này có thể xảy ra ngay cả trên một tệp ASCII đơn giản.
calandoa

@calandoa Cảm ơn về phần trên -b( --ignore-leading-blanks). Để làm rõ một chút: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2cho a<SPACE><SPACE>btrước (cột thứ hai bắt đầu sau cột đầu tiên non-blank to blank transition<SPACE><SPACE>btrước đó <SPACE>a), nhưng với -bnó cho aa<SPACE>anhư mong đợi ( alà trước b).
Kirill Bulygin

7

Để chỉ sắp xếp theo trường thứ hai (do đó trong trường hợp trường thứ hai khớp, những dòng có kết quả phù hợp vẫn theo thứ tự như ban đầu mà không sắp xếp trên các trường khác):

sort -k 2,2 -s orig_file > sorted_file

3

FWIW, đây là một phương pháp sắp xếp để hiển thị quy trình nào đang sử dụng bộ nhớ tốt nhất.

memstat | sort -k 1 -t':' -g -r | less

Các tùy chọn sắp xếp được đặt thành cột đầu tiên, sử dụng: làm bộ tách cột, sắp xếp số và sắp xếp ngược lại.


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.