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.


Bekerja untukku. Mungkin alias di suatu tempat?
Matthieu Cartier

Jawaban:


17
sort --version-sort filename 

Ini menjaga urutan angka.


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 

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


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} ;}

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.