Mengapa 'mengurutkan' mengabaikan karakter khusus, seperti tanda bintang?

27

Saya pikir itu sortakan mengurutkan awalan bersama tetapi itu tidak selalu terjadi. Ambil input ini misalnya:

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

Setelah sort, saya berharap semua AT*berakhir dalam satu potongan tetapi ketika Anda menjalankan data ini melalui sort, ==input output . Mengapa demikian? Saya tidak menentukan opsi apa pun untuk mengabaikan karakter non-alfabet atau apa pun. Adil sort dict > out.

Versi saya sortberasal coreutils 8.5-1ubuntu3.

Aaron Digulla
sumber
Bekerja untukku. Mungkin alias di suatu tempat?
Matthieu Cartier

Jawaban:

17
sort --version-sort filename 

Ini menjaga urutan angka.

Reuben L.
sumber
4
+1 Itu berhasil tetapi mengapa? Hanya ada beberapa digit dalam teks.
Aaron Digulla
2
Bekerja tanpa harus mengubah lingkungan, +1
Meredith
@ AaronDigulla: Saya menduga itu memperlakukan string dalam versi semacam hampir sebagai cara paling bodoh untuk mengurutkan sesuatu, sehingga mengabaikan lokal dan hanya menangani angka dengan cara khusus.
JohnEye
23

Pengaturan LC_ALL = C mengembalikan urutan penyortiran tradisional dalam kasus saya. Paket: coreutils Versi: 8.5-1ubuntu3

export LC_ALL=C 
rahul_jk
sumber
LANG=Cjuga berfungsi. Yang membingungkan saya: LANGdiatur ke en_US.UTF-8; kenapa *masih diperlakukan spesial ??
Aaron Digulla
2
LC_COLLATEadalah pengaturan yang khusus untuk sort, dll.
Dijeda hingga pemberitahuan lebih lanjut.
bekerja untukku di Raspbian // Pixel ... semacam 'gangguan' yang mengabaikan karakter khusus itu mematikan bagiku ... terima kasih.
ZEE
2
tidak perlu exportatau bahkan mengatur lokal dan mungkin mengacaukan sesuatu yang lain. Hanya mengatur dalam panggilan untuk semacam: LC_ALL=C sort. Misalnya echo -e 'a\n*\n*b\nc' | LC_ALL=C sort, LC_ALL tidak akan diubah di luar panggilan untuk menyortir
Hashbrown
1

Ini berfungsi seperti yang diharapkan untuk saya (di cygwin).

sort input > output hasil dalam

AT * AD
AT * Iklan
AT * Eydie
AT * aku akan
AT * IUD
AT * Ito
AT * OD
AT * UT
AT * Uta
AT * Wyatt
AT * iklan
AT * bermata
AT * id
AT * oat
AT * lebih besar daripada
AT * berhutang
AT * kagum
AT0S * delapan puluh
AT0S * eyetooth's
ATF * ATV
ATF * Ediva
ATF * adv
ATF * edify
Pengacara ATFKT *
ATFKT * kalah
ATFKTNK * advokasi
Pendukung ATFKTS *
ATHT * Whitehead
ATHT * whitehead
ATJ * pepatah
ATNXNS * perhatian
ATNXNS * atenuasi
ATNXNS * autoignition
ATP * adobe
ATP0K * idiopatik
ATT * berat
ATT * cerdas
ATT * berhutan
ATX * atishoo

Apakah semacam itu terkait dengan sesuatu? mencoba\sort

Juga

Lokal yang ditentukan oleh lingkungan memengaruhi tata urutan. Set LC_ALL = C untuk mendapatkan urutan sortir tradisional yang menggunakan nilai byte asli

Nifle
sumber
Tidak ada alias. Harus ada fitur spesifik ubuntu / debian.
Aaron Digulla
1

Versi: sort (GNU coreutils) 8.26

Saya melakukannya sebaris:

LANG=C sort FILE

Atau dengan fungsi (mengubah file asli):

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

Untuk memberikan jawaban sederhana berdasarkan komentar orang lain, itu tidak mengubah lingkungan Anda:

input_program | LC_COLLATE=C sort | output_program

atau

LC_COLLATE=C sort < input_file > output_file

atau kombinasinya.

Walf
sumber
0

Dengan GNU sort, Anda dapat menggunakan --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
Igor
sumber