Giả sử tôi có tệp này.phân loại với nhiều phím bằng lệnh sắp xếp Linux
$ cat a.txt
c 1002 4
f 1001 1
d 1003 1
a 1001 3
e 1004 2
b 1001 2
Tôi muốn sắp xếp nó theo cột thứ hai và sau đó là cột thứ ba. Cột hai là số, trong khi cột 3 có thể được coi là chuỗi. Tôi biết lệnh sau hoạt động tốt.
$ sort -k2,2n -k3,3 a.txt
f 1001 1
b 1001 2
a 1001 3
c 1002 4
d 1003 1
e 1004 2
Tuy nhiên, tôi nghĩ rằng sort -k2n a.txt
cũng nên hoạt động, trong khi không.
$ sort -k2n a.txt
a 1001 3
b 1001 2
f 1001 1
c 1002 4
d 1003 1
e 1004 2
Dường như nó sắp xếp theo cột hai, sau đó theo cột một thay vì cột ba. Tại sao chuyện này đang xảy ra? Nó có phải là một lỗi hay không? Nguyên nhân sort -k2 a.txt
hoạt động ok với dữ liệu ở trên vì những con số này chỉ là chiều rộng cố định.
Phiên bản sắp xếp của tôi là sort (GNU coreutils) 8.15
trong cygwin.
Thú vị. 'sort -k2 a.txt' sẽ hoạt động trong trường hợp * this *. '-k2' yêu cầu nó sắp xếp bằng cách sử dụng một khóa bắt đầu ở trường 2 và tiếp tục đến cuối dòng. '-k2n' yêu cầu nó sắp xếp trường 2 theo thứ tự số; điều đó có nghĩa là khóa sắp xếp kết thúc khi gặp phải khoảng trắng giữa các trường 2 và 3. Có thể là một ý tưởng hay khi dán phiên bản sắp xếp của bạn vào câu hỏi ở đâu đó. –
Sử dụng 'sort (GNU coreutils) 8.5' Tôi có thể tạo lại hành vi được mô tả trên Debian ổn định. – alk
@ MikeSherrill'Catcall 'Khi bạn cố gắng sắp xếp một giá trị không phải là số, sắp xếp (1) rơi trở lại phân loại chuỗi. '" 1001 3 "' vv bằng '-k2n' là * không * số. – PointedEars