2016-11-01 31 views
5

Nếu tôi tạo ra một tập tin văn bản có chứa các dòng sau:bất ngờ bash hành vi loại

>TESTTEXT_10000000 
>TESTTEXT_1000000 
>TESTTEXT_10000002 
>TESTTEXT_10000001 

và thực hiện sort myfile, đầu ra của tôi là

>TESTTEXT_1000000 
>TESTTEXT_10000000 
>TESTTEXT_10000001 
>TESTTEXT_10000002 

Tuy nhiên, nếu tôi thêm/1 và/2 đến dòng của tôi đầu ra sắp xếp thay đổi mạnh mẽ, và tôi không biết tại sao.

Input:

>TESTTEXT_10000000/1 
>TESTTEXT_1000000/1 
>TESTTEXT_10000002/1 
>TESTTEXT_10000001/1 

Output:

>TESTTEXT_10000000/1 
>TESTTEXT_1000000/1 
>TESTTEXT_10000001/1 
>TESTTEXT_10000002/1 

Input:

>TESTTEXT_10000000/2 
>TESTTEXT_1000000/2 
>TESTTEXT_10000002/2 
>TESTTEXT_10000001/2 

Output:

>TESTTEXT_10000000/2 
>TESTTEXT_10000001/2 
>TESTTEXT_1000000/2 
>TESTTEXT_10000002/2 

Dấu gạch chéo có được nhận dạng như một seperator không? sử dụng --field-sperator không làm thay đổi hành vi. Nếu vậy, tại sao là 1000000/2 ở giữa các mục 1000001/2 và 1000002/2? Sử dụng loại người, kiểu số hoặc các tùy chọn khác không bao giờ mang lại sự nhất quán. Có ai có thể giúp tôi ngoài này không?

: chỉnh sửa: Bởi vì nó có vẻ là có liên quan, xem xét các câu trả lời, giá trị của LC_ALL trên máy tính này là en_GB.UTF-8

+2

Hãy thử điều này: 'LC_ALL = C sắp xếp tệp' – user000001

Trả lời

3

/ là trước 0 trong miền địa phương của bạn. Sử dụng LC_ALL=C hoặc ngôn ngữ khác sẽ không thay đổi bất cứ điều gì đúng cách.

Trong trường hợp sử dụng của bạn, bạn sẽ đúng cách có thể sử dụng -V ersion loại:

sort -V myfile 

Alternative bạn có thể xác định dấu phân cách và các phím để sắp xếp trên:

sort -t/ -k1,1 myfile 
+0

Rất kỳ quặc, LC_ALL = C đã giải quyết được vấn đề của tôi và thực hiện thứ tự nhất quán. Tuy nhiên, tùy chọn sắp xếp -V cũng giải quyết được vấn đề mà không thay đổi ngôn ngữ, vì vậy tôi sẽ chấp nhận câu trả lời này. – TDierckx

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