Sıralama komutunun yanlış davranışı?


14

Bir dosyanın içeriğini Ubuntu masaüstü 14.04'te (Trusty Tahr) sıralamaya çalıştım . Benim durumumda, beklenen sonuç orijinal içerikle aynı olmalı, ancak gerçek sonuç değil. Neden?

# cat test.txt
a++-a
a++-b
a++-c
ab
ac
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c

4
Sana yararsız kullanmancat için sana küçük bir ödül hediye ediyorum .
David Foerster

3
@DavidFoerster ait açıklama değiştirmek anlamına işaret komik bir yoludur cat test.txt | sorttarafından sort test.txt:)
Volker Siegel

@VolkerSiegel: Doğru, catbaşlangıç ​​için kullanılan yararlı formülasyonlar olsa da . Örneğin cat FILE | grep dev | sort, yalnızca içinde "dev" bulunan satırları görüntüler (sıralı olarak). Kullanmak sort FILE | grep devaynı çıktıyı üretir ancak renklendirir.
AlainD

Yanıtlar:


17

LC_ALLDeğişkeni kullanabilir , LC_ALL=Caramadan önce olarak ayarlayabilirsinizsort

$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac

Bunu okuyunBunun sihirli bir şekilde ne olduğunu bilmek istiyorsanız cevabıLC_ALL=C . İşte kısa özet:

C yerel ayarı en basit yerel ayar anlamına gelen özel bir yerel ayardır. Diğer yerel ayarlar insanlar için olsa da, C yerel ayarının bilgisayarlar için olduğunu da söyleyebilirsiniz. C yerelinde karakterler tek bayt, karakter kümesi ASCII, sıralama düzeni bayt değerlerine dayanır.

Ayrıca, @KenMollerup'un işaret ettiği gibi, alıntı man sort

   ***  WARNING  ***  The locale specified by the environment affects sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

Bu nedenle LC_ALL=C, sıralama özelliğini kullanırken , sembolleri sırasıyla karşılaştırın. Aksi takdirde sortalfasayısal olmayan tüm karakterleri yoksayar.


Üzgünüm bunu görmedim, yoruma tepki verdim!
Ken Mollerup

@KenMollerup işaret ettiğiniz için teşekkürler man sort. Fark etmedim
c0rp

8

Sıralama, alfabetik ve sayısal sıralama kullanır, bizim gibi, + - <> ... gibi özel karakterler göz ardı edilir, sayılar 1, 2, 3 gibi sayısal olarak kabul edilir. 11, 12 1066 1104'ten önce gelir - bakın!

Listeniz şu şekilde görülüyor: aa, ab, ab, ac, ac


Test.txt istenen yolu sıralayacak şekilde özel karakterleri göz ardı etmeyecek şekilde sıralama için herhangi bir seçenek var mı?
Doug Smythies

6
Bunu insan türüne göre sıralayın: *** UYARI *** Ortam tarafından belirlenen yerel ayar sıralama düzenini etkiler. Yerel bayt değerlerini kullanan geleneksel sıralama düzenini almak için LC_ALL = C olarak ayarlayın.
Ken Mollerup

@KenMollerup, lütfen cevabınıza daha fazla bilgi ekleyin. Alıntı man sortekleyin, örnekler ekleyin.
c0rp

Evet ama çok yavaştım, aşağıdaki c0rp'nin cevabına bakın.
Ken Mollerup
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.