'Sıralama' neden yıldız işareti gibi özel karakterleri yoksayıyor?


27

Bunun sortortak önekleri birlikte sıralayacağını düşündüm ama bu her zaman olmaz. Örneğin bu girişi alın:

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

Sonra sort, hepsinin AT*bir yığın halinde bitmesini beklerdim, ancak bu verileri çalıştırdığınızda sortçıktı ==girişi. Neden? Alfabetik olmayan karakterleri veya herhangi bir şeyi görmezden gelmek için herhangi bir seçenek belirtmiyorum. Sadece sort dict > out.

Benim versiyonum sortgeliyor coreutils 8.5-1ubuntu3.


Benim için çalışıyor. Belki bir yerlerde bir diğer ad?
Matthieu Cartier,

Yanıtlar:


17
sort --version-sort filename 

Bu, sayıların doğal sırasını korur.


4
+1 Bu işe yarıyor ama neden? Metinde sadece birkaç rakam var.
Aaron Digulla,

2
Çevreyi değiştirmeye gerek kalmadan çalışıyor, +1
Meredith

@AaronDigulla: Dizeleri, diziliş düzeninde dizileri bir şeyleri sıralamak için en saçma yol olarak gördüğünden şüpheleniyorum, bu nedenle yerel ayarları yok sayar ve sayıları özel bir şekilde ele alır.
JohnEye

23

LC_ALL = C ayarı, benim durumumda geleneksel sıralama düzenini geri kazandırdı. Paket: coreutils Sürüm: 8.5-1ubuntu3

export LC_ALL=C 

LANG=Cayrıca çalışır. Beni hayrete: LANGhiç kümesidir en_US.UTF-8; neden *hala özel tedavi edilir?
Aaron Digulla

2
LC_COLLATEözel sort, vb. ayardır .
sonraki bildirime kadar duraklatıldı.

Raspbian // Pixel'de benim için çalışıyor ... Özel karakterleri görmezden gelen sıralama 'can sıkıntısı' benim için güçtü ... teşekkürler.
ZEE

2
Gerek yok exportya da başka bir şey ile bile set yerel ve muhtemelen karmaşa. Sadece tür çağrısında ayarlayın: LC_ALL=C sort. Örneğin echo -e 'a\n*\n*b\nc' | LC_ALL=C sort, LC_ALL sıralama çağrısının dışında değiştirilmeyecek
Hashbrown

1

Benim için beklendiği gibi çalışıyor (cygwin'de).

sort input > output sonuçlanır

* AD, AT
AT * Reklam
AT * Eydie
AT * Ben istiyorum
AT * RİA
AT * Ito
AT * OD
AT * UT
AT * Uta
AT * Wyatt
* Reklama AT
AT * gözlü
* İd AT
* Yulaf AT
AT * ağır basmaktadır
AT * borçlu
AT * büyüledi
AT0S eightieths *
AT0S * köpek dişi en
ATF * ATV
ATF * Ediva
ATF * zarf
ATF * edify
ATFKT * savunucusu
ATFKT * outfought
ATFKTNK * Advocating
ATFKTS savunucuları *
ATHT * Whitehead
ATHT * whitehead
ATJ * atasözü
ATNXNS * dikkat en
ATNXNS * zayıflama en
ATNXNS * kendinden yanma en
ATP * kerpiç
ATP0K * idiyopatik
ATT * tartılı
ATT * zeki
ATT * ağaçlık
ATX * atishoo

Sıralama bir şeye takılmış mı? Deneyin\sort

Ayrıca

Ortam tarafından belirtilen yerel ayar sıralama düzenini etkiler. Yerel bayt değerlerini kullanan geleneksel sıralama düzenini elde etmek için LC_ALL = C ayarını yapın


Takma isim yok. Bazı ubuntu / debian'a özgü bir özellik olmalı.
Aaron Digulla,

1

Sürüm: sort (GNU coreutils) 8.26

Satır içi yapıyorum:

LANG=C sort FILE

Veya işlevine göre (orijinal dosyayı değiştirir):

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

1

Başkalarının yorumlarına dayanarak, ortamınızı değiştirmeyen basit bir cevap sağlamak için:

input_program | LC_COLLATE=C sort | output_program

veya

LC_COLLATE=C sort < input_file > output_file

veya bunların kombinasyonları.


0

GNU sıralama ile şunları kullanabilirsiniz --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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.