2011-08-23 13 views
6

[Bu karışıklık için kusura bakma geriye sorulan benzer bir soruya ... bir yeniden yazma olduğunu!] Ben s ve standart sort programı lider konusunda aklım karıştıUNIX sıralama yardımcı programı, -b seçeneği olmadan önde gelen alanları neden yok sayar?

. myfile içeriğini düşünün:

a 
b 
    a 

sort -t : myfile yürütme en azından bana, beklenmeyen bir sonuç verir: mantıklı

a 
    a 
b 

İşe Yarar? <space>, a-z'dan (ya da ASCII'de olduğu gibi) önce veya sonra gelmelidir. dahil değildi zaman eğer ikinci durumda

a 
b 
    a 

Neden sonra, sort (lider s görmezden) -b seçeneği uygulamak gibi görünüyor ederken İlk durumda ben

a 
b 
a 

beklenebilir ? Aslında, güvende olmak için her satırda tam olarak bir alana sahip olmak için -t seçeneğini ekledim. (According to the POSIX standard, "Bir alan seçeneği-t, önceki herhangi bir alan ayracı yokluğunda, karakter olmayan ayrılması ve bir maksimal sekansı içerir." sort myfile da beklenmeyen bir durumdur aynı çıkış, ortaya çıkarır.) Önceden

sayesinde ! Adam sayfasından

cevap

9

Yerel ayarlara göre değişir.

LC_COLLATE=en_US.utf8 sort myfile 

ile senin beklenmeyen bir sonuç almak ve

LC_COLLATE=C sort myfile 

ile senin beklenen sonuç almak. Ayrıca (ı sıralama -b kolları neden bilir ve böyle -t yoktur.) bash sort unusual order. Problem with spaces?

bkz

+0

1: Alçakgönüllülük :) –

+0

@Ernest: Bu kadar yeter! Alçakgönüllüyü çıkardım. –

+0

Teşekkür ederiz! En_US.UTF-8'in altında nasıl çalıştığıyla ilgili olarak, bunu anlayamıyorum ... [colletion chart] (http://www.collation-charts.org/opensolaris/opensolaris.2008.05.en_US.UTF- En_US.UTF-8 için 8.html) A ve B arasında bir boşluk yok ... –

7
$ sort -t : foo 
a 
    a 
    b 
$ env LC_ALL=C sort -t: foo 
    a 
    b 
a 

: * UYARI * çevre tarafından belirtilen yerel sıralamayı etkiler. Yerel bayt değerlerini kullanan geleneksel sıralama sırasını almak için LC_ALL = C öğesini ayarlayın.

İlgili konular