2013-07-02 47 views
19

Tôi đang cố sắp xếp tệp này dựa trên cột thứ tư. Tôi muốn tập tin được sắp xếp lại dựa trên các giá trị của cột thứ tư.Sắp xếp tệp phân cách tab dựa trên lệnh sắp xếp cột bash

File:

2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 
1 1:10363487:T 0 10363487 

Tôi muốn nó được sắp xếp như thế này:

1 1:10363487:T 0 10363487 
2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 

tôi đã cố gắng lệnh này:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename> 

Nhưng tôi nhận được bất hợp pháp lỗi tên biến. Ai đó có thể giúp tôi với điều này?

Trả lời

44

Để sắp xếp trên cột thứ tư chỉ sử dụng bộ chọn -k 4,4.

sort -t $'\t' -k 4,4 <filename> 

Bạn cũng có thể muốn -V sắp xếp số tự nhiên hơn. Ví dụ: sinh lợi 1 2 10 thay vì 1 10 2 (thứ tự từ điển).

sort -t $'\t' -k 4,4 -V <filename> 

Nếu bạn gặp lỗi về số $'\t' thì hãy đảm bảo vỏ của bạn bị bash. Có lẽ bạn đang thiếu #!/bin/bash ở đầu tập lệnh của mình?

+0

cùng lỗi mặc dù .. bất hợp pháp tên biến. Tôi không biết cách giải quyết nó. Tôi biết vấn đề là với $ – Vignesh

+1

Hãy chắc chắn rằng bạn đang sử dụng bash và không phải '#!/Bin/sh' hoặc' sh script' –

+2

Ngoài ra, tùy chọn '-t' sẽ là tùy chọn ở đây, vì dấu tách cột mặc định của "bất kỳ khoảng trống nào" sẽ đủ cho tệp của bạn. – chepner

3

Tôi tin rằng bạn có một lệnh sai số $ trong lệnh của bạn.

Hãy thử:

sort -t\t -nk4 
+2

'$ '..'' là cú pháp bash để mở rộng chuỗi thoát. Trong trường hợp này nó mở rộng đến một tab chữ. –

+0

đã giúp nhưng không thể đặt hàng là 1 2 10 hơn 1 10 2 22 ?? – Vignesh

+1

Đó là những gì cờ '-n' sẽ được thực hiện (kiểu số). – Phylogenesis

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