Làm thế nào để sắp xếp số theo cột cuối cùng?


23

Tôi có đầu vào này:

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4

Tôi cần đầu ra này:

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1

Vì vậy, tôi cần sắp xếp các dòng theo cột cuối cùng.

Tôi không biết có bao nhiêu cột trong một dòng.

Tôi chỉ không thể tìm ra nó, làm thế nào để làm điều đó. Tôi không có "quyền hạn perl". Tôi chỉ có ~ sức mạnh kịch bản trung bình với sed, awk, cut, v.v.

Có ai biết làm thế nào để làm điều đó?

Câu trả lời:


34

Dòng lệnh sau sử dụng awkđể thêm vào trường cuối cùng của mỗi dòng file.txt, thực hiện sắp xếp số ngược lại, sau đó sử dụng cutđể xóa trường đã thêm:

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '

ồ ... tôi không biết về $ RS !! Cảm ơn nhiều!!!!!
LanceBaynes

@forcefsck: Tôi không nghĩ chỉ có thể với nó sort -k. Các begfieldchức năng trong GNU loại chỉ đếm xuống không. Cách tiếp cận trang trí sắp xếp (DSU) của bạn dường như là cách tốt nhất tôi nghĩ.
Mikel

Hết hứng thú, tại sao $NF,$RSvà không $NF,$0? Tôi không biết $RSđã làm điều đó. (Tôi đoán nó tương đương với $NF,$"\n", điều này cũng tương tự, nhưng tôi cũng ngạc nhiên.)
Mikel

2
@ johnny8888, @forcefsck: Trong awk, $có thể được theo sau bởi bất kỳ biểu thức nào. “ Hiệu quả của biểu thức số lĩnh vực đánh giá bất cứ điều gì khác hơn là một số nguyên không âm là không xác định ”. GNU awk (trên hệ thống của tôi) xử lý một chuỗi như "\n"0. Những người khác (ví dụ: triển khai ban đầu bởi A, W và K) hủy bỏ với thông báo lỗi. Nếu RStình cờ là một chữ số, bạn sẽ nhận được trường tương ứng trên bất kỳ triển khai nào. Vì vậy, đừng làm điều này, sử dụng $0.
Gilles 'SO- ngừng trở nên xấu xa'

1
Thực sự gọn gàng! Vì vậy, lời giải thích dài về những gì đang diễn ra: với awk, in trường cuối cùng trước sau đó là toàn bộ bản ghi, sắp xếp ngược lại bằng số, sau đó cắt bỏ cột đầu tiên bằng cách sử dụng cắt.
phyatt
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.