Cách sắp xếp tệp dựa trên một phần của trường


11

Tôi muốn sắp xếp một tập tin:

   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
     F91HE*-K92HA      7.242      3.910   4.88e+04 -- 

và lấy cái này

   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
   F91HE*-K92HA      7.242      3.910   4.88e+04 -- 
   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 

Đó là, sắp xếp số lượng trên các ký tự thứ hai và tiếp theo của chuỗi không trống đầu tiên trên dòng.


rõ ràng trình soạn thảo đã không giữ định dạng mà tôi đã sử dụng cho tệp ....
edith

Bạn đã thử sortlệnh chưa?
Eric Renouf

vâng, nhưng rõ ràng tôi không biết cách sử dụng nó đúng cách .... Tôi đã thử: sort -b + 0.1n -1 nhưng cũng sắp xếp -n -k1,1 -k1,4 (và nhiều người khác) nhưng không ai trong số những người đã làm việc
edith

1
Bạn muốn sắp xếp theo số bắt đầu từ ký tự thứ hai?
pfnuesel

chính xác. Vấn đề là trong tập tin, có các số trống khác nhau trước trường đầu tiên
edith

Câu trả lời:


19
sort -k 1.2bn < file

Sắp xếp nmột cách ngẫu nhiên trên một mắt kbắt đầu bằng ký tự 2thứ hai của trường 1st bỏ qua các ô hàng đầu b(và kết thúc ở cuối dòng, nhưng điều đó không quan trọng đối với một loại số chỉ xem xét chuỗi số thập phân ban đầu).

Lưu ý rằng nếu có một cà vạt, như ở giữa hai dòng này:

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

Sau đó, thứ tự sẽ dựa trên loại sắp xếp cuối cùng so sánh hai dòng hoàn toàn dưới dạng chuỗi.

Với một số địa phương, các khoảng trống sẽ bị bỏ qua trong trường hợp đầu tiên để so sánh các chuỗi trong trường hợp F91 sẽ xuất hiện trước K92 (như Fsắp xếp trước K). Với những người khác như ở miền C, khoảng trống sẽ không bị bỏ qua và K92 sau đó sẽ đến trước F91 (sắp xếp không gian trước F).

Đối với loại sắp xếp cuối cùng sẽ bỏ qua khoảng trống hàng đầu bất kể địa phương, bạn có thể làm:

sort -k 1.2bn -k 1b < file

Điều đó 1bsẽ sắp xếp (theo quan hệ trên khóa đầu tiên) theo từ vựng trên phần của dòng bắt đầu với trường đầu tiên bỏ qua khoảng trống hàng đầu.

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.