2012-01-26 42 views
20

Tôi có một tập tin như thế này (được không gian giới hạn):cách sử dụng lệnh Linux Sắp xếp để sắp xếp tệp văn bản theo cột thứ 4, thứ tự số?

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067 
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067 

và tôi muốn sử dụng sort lệnh để sắp xếp các tập tin theo cột thứ 4. Tôi tìm nó ở khắp mọi nơi trên internet và tôi tìm thấy các giải pháp khác nhau mà nun hoạt động !! Tôi thậm chí còn tìm thấy câu hỏi tương tự trong stackoverflow mà câu trả lời đã không làm việc cho tôi! vì vậy đây là những lệnh mà tôi đang sử dụng và không hoạt động!

sort -n -k 4,1 out1.txt 
sort -n -k 4 out1.txt 
sort -n -k4 out1.txt 
sort -nk4 out1.txt 
sort +4 out1.txt 

như vậy sau khi chạy tất cả các lệnh này tôi nhận được kết quả này (đó là giống với đầu vào của tôi):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067 
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067 

Tôi muốn để có được một kết quả như thế này:

AX-19 Chr1_419087 1 41908741 T C 0 15 0.067 
AX-20 Chr1_419087 1 41908740 T C 0 13 0.067 
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
+1

nếu bạn muốn được giúp đỡ hơn, tôi khuyên bạn chỉ định những gì sẽ xảy ra, và những gì bạn mong muốn thay vì – sehe

+0

41.908.545 ít hơn 41908741. Bạn có muốn sắp xếp các con số bằng chữ số có nghĩa nhất của họ ? – Joni

+1

Bạn có thể giải thích nguyên tắc nào khiến cho thứ tự ưa thích của bạn là '41908740',' 41908741', '41908545'? Dường như không có ** thứ tự nào cho những thứ đó. – wallyk

Trả lời

34
sort -nk4 file 

-n for numerical sort 
-k for providing key 

hoặc thêm -r option cho ngược sắp xếp

sort -nrk4 file 
1

Nó phải là

sort -k 4n out1.txt 

Jus t thử nghiệm này với GNU loại (--debug kích hoạt):

$ tac input | /bin/sort --debug -k 4n 
/bin/sort: using simple byte comparison 
/bin/sort: key 1 is numeric and spans multiple fields 
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
        ________ 
___________________________________________ 
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067 
        ________ 
___________________________________________ 
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067 
        ________ 
___________________________________________ 
+0

không có nó cũng không hoạt động! – mahmood

6

sort không sắp xếp các tập tin tại chỗ. Nó xuất ra một bản sao được sắp xếp để thay thế.

Bạn cần sort -n -k 4 out.txt > sorted-out.txt.

Chỉnh sửa: Để nhận đơn đặt hàng bạn muốn, bạn phải sắp xếp tệp theo các số đọc ngược lại. Đây có phải nó:

cut -d' ' -f4 out.txt | rev | paste - out.txt | sort -k1 -n | cut -f2- > sorted-out.txt

+0

Nó không hoạt động! – mahmood

+0

Nhưng dữ liệu của bạn không có 41908745. Nó có 41908545. – Joni

0

Đó là hữu ích để nhắc rằng nếu những lời trong mỗi dòng của tập tin được phân cách bằng dấu phân cách trừ 'không gian', sau đó chúng ta có thể xác định dấu phân cách sử dụng tùy chọn “-t”:

sort -n -t',' -k4 file -o outfile 

Chúng tôi có thể lấy đầu ra được sắp xếp trong bất kỳ tệp đầu ra được chỉ định nào (sử dụng tùy chọn “-o”) thay vì hiển thị đầu ra trên đầu ra tiêu chuẩn.

nguồn: http://www.thegeekstuff.com/2013/04/sort-files/

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