Thứ tự mặc định của Linux là gì?


18

Trong một thời gian dài, tôi nghĩ rằng hành vi mặc định của sortchương trình là sử dụng thứ tự ASCII. Tuy nhiên, khi tôi nhập các dòng sau vào sortmà không có bất kỳ đối số nào:

#
@

Tôi đã nhận:

@
#

Nhưng theo bảng ASCII, #là 35 và @là 64. Một ví dụ khác là:

A
a

Và đầu ra là:

a
A

Bất cứ ai có thể giải thích điều này? Nhân tiện, 'thứ tự từ điển' khi sử dụng là sort -dgì?


5
thứ tự sắp xếp tùy thuộc vào cài đặt ngôn ngữ của bạn
janneb

2
Nhưng theo thứ tự chữ cái theo mặc định ít nhất là theo loại GNU.
jarno

Câu trả lời:


17

Có vẻ như bạn đang sử dụng ngôn ngữ không phải POSIX.

Thử:

export LC_ALL=C

và sau đó sort.

info sort nói rõ ràng:

(1) Nếu bạn sử dụng ngôn ngữ không phải POSIX (ví dụ: bằng cách đặt `LC_ALL 'thành` en_US'), thì` sort 'có thể tạo ra đầu ra được sắp xếp khác với bạn đã quen. Trong trường hợp đó, đặt biến môi trường `LC_ALL 'thành` C'. Lưu ý rằng chỉ cài đặt `LC_COLLATE 'có hai vấn đề. Đầu tiên, nó không hiệu quả nếu `LC_ALL 'cũng được đặt. Thứ hai, nó có hành vi không xác định nếu `LC_CTYPE '(hoặc` LANG', nếu` LC_CTYPE 'không được đặt) được đặt thành giá trị không tương thích. Ví dụ: bạn nhận được hành vi không xác định nếu `LC_CTYPE 'là` ja_JP.PCK' nhưng` LC_COLLATE 'là` en_US.UTF-8'.


3
OP đang hỏi thứ tự sắp xếp là gì, không phải làm thế nào để thay đổi nó.

1
Cảm ơn, tôi đã thử nghiệm trên máy và cài đặt ngôn ngữ của mình có ảnh hưởng đến hành vi sắp xếp

2

Để xác định thứ tự sắp xếp, chỉ cần tạo một tệp có một ký tự khác nhau trên mỗi dòng và sắp xếp nó. Đầu ra kết quả sẽ cho bạn biết thứ tự sắp xếp.


Đẹp, đơn giản và hiệu quả

1
Nói chung là một ý tưởng rất tốt, nhưng nó không phải lúc nào cũng đủ. Một đối chiếu không cần chỉ được xác định trên các ký tự riêng lẻ. Một số va chạm đối xử với "ae" như thể đó là một dây chằng hoặc đối xử với dây chằng như thể chúng bị phân hủy. Một trường hợp khác là nhiều bộ sưu tập coi 'a' và 'A' là bằng nhau, nhưng thứ tự bạn thấy bằng cách kiểm tra không cho bạn biết điều đó (nó có thể cho bạn biết liệu sắp xếp có ổn định hay không). Và một thử nghiệm một ký tự không cho biết liệu mở rộng tab, chuẩn hóa khoảng trắng, v.v. có hiệu lực hay không. Tuy nhiên, đó là một nơi rất tốt để bắt đầu.
TextGeek

1
(quá muộn để chỉnh sửa nhận xét trước đó) - miễn là bạn thực sự bao gồm một phạm vi nhân vật đủ đa dạng, bạn có thể nói bỏ qua trường hợp không nhìn thấy (ví dụ) aAbB thay vì abAB.
TextGeek

2

Như đã man sortnói, từ điển theo thứ tự từ ngữ có nghĩa là tiếng Đức chỉ xem xét các khoảng trống và các ký tự chữ và số. Ví dụ, đưa ra dữ liệu

The
!quick
brown
@fox
jumps
#over
17
$lazy
  dogs
%42
times.

sortlệnh không được tạo ra

  dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.

(đặt theo dòng bắt đầu bằng ký tự không gian và !, #, $, %, và @những biểu tượng 1 trước các dòng bắt đầu với chữ cái và các con số; ví dụ, ký tự chữ và số ), nhưng sort -dsản xuất

  dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.

  dogsvẫn là đầu tiên, bởi vì nó bắt đầu bằng dấu cách, nhưng các ký tự (dấu chấm câu) đặc biệt bị bỏ qua.  17đến trước 42, và foxxuất hiện giữa brownjumps, mặc dù thực tế là như vậy 42foxcó các nhân vật ở phía trước họ thường di chuyển họ trước 17.
____________
1 theo thứ tự các giá trị ASCII của chúng: space = 040, != 041, #= 043, $= 044, %= 045 và @= 0100. Lưu ý rằng (không tính đến thanh không gian), đây là thứ tự từ trái sang phải trên một số bàn phím.

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.