Tại sao 'sắp xếp' bỏ qua các ký tự đặc biệt, như dấu hoa thị?


27

Tôi nghĩ rằng sortsẽ sắp xếp các tiền tố chung với nhau nhưng điều đó không luôn xảy ra. Lấy đầu vào này làm ví dụ:

AT0S*eightieths
AT0S*eyetooth's
AT*ad
AT*Ad
AT*AD
AT*Eydie
AT*eyed
ATF*adv
ATF*ATV
ATF*edify
ATF*Ediva
ATFKT*advocate
ATFKTNK*advocating
ATFKT*outfought
ATFKTS*advocates
ATHT*whitehead
ATHT*Whitehead
AT*id
AT*I'd
AT*Ito
AT*IUD
ATJ*adage
ATNXNS*attention's
ATNXNS*attenuation's
ATNXNS*autoignition's
AT*oat
AT*OD
AT*outweigh
AT*owed
ATP0K*idiopathic
ATP*adobe
ATT*wighted
ATT*witted
ATT*wooded
AT*UT
AT*Uta
AT*wowed
AT*Wyatt
ATX*atishoo

Sau đó sort, tôi hy vọng tất cả AT*sẽ kết thúc trong một đoạn nhưng khi bạn chạy dữ liệu này sort, đầu ==vào đầu ra . Tại sao vậy? Tôi không chỉ định bất kỳ tùy chọn nào để bỏ qua các ký tự không phải là chữ cái hoặc bất cứ thứ gì. Chỉ cần sort dict > out.

Phiên bản của tôi sortđến từ coreutils 8.5-1ubuntu3.


Làm việc cho tôi. Có lẽ một bí danh ở đâu đó?
Matthieu Cartier

Câu trả lời:


17
sort --version-sort filename 

Điều này bảo tồn thứ tự tự nhiên của số.


4
+1 Điều đó hoạt động nhưng tại sao? Chỉ có một vài chữ số trong văn bản.
Aaron Digulla

2
Hoạt động mà không cần thay đổi môi trường, +1
Meredith

@AaronDigulla: Tôi nghi ngờ rằng nó xử lý các chuỗi trong phiên bản sắp xếp gần như là cách ngu ngốc nhất để sắp xếp mọi thứ, vì vậy nó bỏ qua miền địa phương và chỉ xử lý các số theo cách đặc biệt.
JohnEye

23

Đặt LC_ALL = C đã khôi phục thứ tự sắp xếp truyền thống trong trường hợp của tôi. Gói: coreutils Phiên bản: 8,5-1ubfox3

export LC_ALL=C 

LANG=Ccũng hoạt động. Điều gì làm tôi LANGbối rối: được đặt thành en_US.UTF-8; Tại sao *vẫn được đối xử đặc biệt ??
Aaron Digulla

2
LC_COLLATElà cài đặt dành riêng cho sort, v.v.
Tạm dừng cho đến khi có thông báo mới.

hoạt động với tôi trong Raspbian // Pixel ... loại 'phiền toái' bỏ qua các ký tự đặc biệt đã giết chết tôi ... cảm ơn.
ZEE

2
không cần exporthoặc thậm chí đặt cục bộ và có thể gây rối với thứ khác. Chỉ cần đặt nó trong cuộc gọi để sắp xếp : LC_ALL=C sort. Ví dụ: echo -e 'a\n*\n*b\nc' | LC_ALL=C sortLC_ALL sẽ không được thay đổi ngoài lệnh gọi sắp xếp
Hashbrown

1

Nó hoạt động như mong đợi đối với tôi (trên cygwin).

sort input > output kết quả trong

TẠI * AD
AT * Quảng cáo
TẠI * Eydie
TẠI * Tôi
TẠI * vòng tránh thai
TẠI * Ito
TẠI * OD
TẠI * UT
TẠI * Uta
TẠI * Wyatt
Quảng cáo AT *
AT * mắt
AT * id
AT * yến mạch
AT * vượt trội
AT * nợ
AT * wow
AT0S * tám mươi
AT0S * của mắt
ATF * ATV
ATF * Ediva
ATF * trước
ATF * chỉnh sửa
ATFKT * ủng hộ
ATFKT * outfiber
ATFKTNK * ủng hộ
ATFKTS * ủng hộ
ATHT * Đầu trắng
ATHT * mụn đầu trắng
Câu ngạn ngữ ATJ *
ATNXNS * chú ý
ATNXNS * suy giảm
ATNXNS * tự động
ATP * adobe
ATP0K * vô căn
ATT * hoảng sợ
ATT * đã khóc
ATT * rừng
ATX * atishoo

Là sắp xếp bí danh cho một cái gì đó? thử\sort

Cũng thế

Các miền được chỉ định bởi môi trường ảnh hưởng đến thứ tự sắp xếp. Đặt LC_ALL = C để nhận thứ tự sắp xếp truyền thống sử dụng các giá trị byte gốc


Không có bí danh. Phải là một số tính năng cụ thể của Ubuntu / debian.
Aaron Digulla

1

Phiên bản: sort (GNU coreutils) 8.26

Tôi làm nó nội tuyến:

LANG=C sort FILE

Hoặc theo chức năng (thay đổi tệp gốc):

dosort() { local file="$*"; LANG=C sort ${file} -o ${file}.swp; mv ${file}.swp ${file}; cat ${file} ;}

1

Để cung cấp một câu trả lời đơn giản dựa trên nhận xét của người khác, điều đó không thay đổi môi trường của bạn:

input_program | LC_COLLATE=C sort | output_program

hoặc là

LC_COLLATE=C sort < input_file > output_file

hoặc kết hợp chúng.


0

Với sắp xếp GNU, bạn có thể sử dụng --dictionary-order:

NAME
       sort - sort lines of text files

SYNOPSIS
       sort [OPTION]... [FILE]...
       sort [OPTION]... --files0-from=F

DESCRIPTION
       Write sorted concatenation of all FILE(s) to standard output.

       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options too.  Ordering options:

       -b, --ignore-leading-blanks
              ignore leading blanks

       -d, --dictionary-order
              consider only blanks and alphanumeric characters
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.