Linux sıralamasının varsayılan sırası nedir?


18

Uzun bir süre için sortprogramın varsayılan davranışının ASCII sırasını kullandığını düşündüm . Ancak, sortherhangi bir argüman olmadan aşağıdaki satırları girdiğimde :

#
@

Bende var:

@
#

Ancak ASCII tablosuna göre #, 35 ve @64'tür. Başka bir örnek:

A
a

Ve çıktı:

a
A

Bunu açıklayan var mı? Bu arada, kullanırken 'sözlük sırası' sort -dnedir?


5
sıralama düzeni yerel ayarlarınıza bağlıdır
janneb

2
Ancak varsayılan olarak en azından GNU türünde alfabetik olarak sıralanmıştır.
jarno

Yanıtlar:


17

POSIX olmayan bir yerel ayar kullandığınız anlaşılıyor.

Deneyin:

export LC_ALL=C

ve sonra sort.

info sort açıkça söylüyor:

(1) POSIX olmayan bir yerel ayar kullanırsanız (örneğin, `` LC_ALL '' değerini `en_US 'olarak ayarlayarak),` `sort' 'alışkın olduğunuzdan farklı sıralanan çıktılar üretebilir. Bu durumda, LC_ALL ortam değişkenini `` C '' olarak ayarlayın. Yalnızca `LC_COLLATE 'ayarının iki sorunu olduğunu unutmayın. İlk olarak, `LC_ALL 'da ayarlanmışsa etkisizdir. İkincisi, `` LC_CTYPE '' (veya `` LC_CTYPE '' ayarlanmamışsa `` LANG '') uyumsuz bir değere ayarlanmışsa tanımsız davranışa sahiptir. Örneğin, `LC_CTYPE '' ja_JP.PCK ', ancak` LC_COLLATE' `en_US.UTF-8 'ise tanımsız davranışa sahip olursunuz.


3
OP sıralama düzeninin ne olduğunu soruyor, nasıl değiştirileceğini değil.

1
Teşekkürler, makinemde test yaptım ve yerel ayarlar sıralama davranışını etkiliyor

3

Sıralama düzenini belirlemek için, her satırda farklı bir karaktere sahip bir dosya oluşturun ve sıralayın. Ortaya çıkan çıktı size sıralama düzenini söyleyecektir.


Güzel, basit ve etkili

1
Genellikle çok iyi bir fikir, ama her zaman yeterli değil. Bir harmanlamanın yalnızca tek tek karakterler üzerinde tanımlanması gerekmez. Bazı harmanlamalar "ae" ye bir ligatür gibi davranır ya da bitişik harflere ayrıştırılmış gibi davranır. Başka bir durum, birçok harmanlamanın 'a' ve 'A' yı eşit olarak ele almasıdır, ancak test ederek gördüğünüz sipariş size bunu söylemez (sıralamanın kararlı olup olmadığını söyleyebilir). Tek karakterli bir test, sekme genişletmesinin, boşluk normalleştirmesinin vb. Geçerli olup olmadığını söylemez. Yine de, başlamak için çok iyi bir yer.
TextGeek

1
(önceki yorumu düzenlemek için çok geç) - yeterince farklı karakter aralığı eklediğiniz sürece, abAB yerine aAbB'yi görmekten (örneğin) görmezden gelmeyi söyleyebilirsiniz.
TextGeek

2

As man sortdiyor, “Sözlük-düzen” anlamına gelir “sadece kuru sıkı ve alfanümerik karakterler dikkate”. Örneğin, veriler

The
!quick
brown
@fox
jumps
#over
17
$lazy
  dogs
%42
times.

süslenmemiş sortkomut

  dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.

(boşluk karakterleri ile başlar çizgiler koyarak !, #, $, %, ve @semboller 1 harf ve sayılarla başlayan çizgilerin öncesinde; yani alfanümerik karakterler ), ancak sort -düretir

  dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.

  dogsboşluklarla başlar, ancak özel (noktalama işaretleri) karakterleri yok sayılır.  17önce gelir 42ve foxaralarında gelir brownve jumpsgerçeğine rağmen, 42ve foxnormalde önce onları taşımak istiyorsunuz önlerinde karakterler var 17.
____________
1 ASCII değerlerine göre: boşluk = 040, != 041, #= 043, $= 044, %= 045 ve @= 0100. (Boşluk çubuğunu göz ardı ederek) bunun bazı klavyelerde yaklaşık soldan sağa sıra olduğunu unutmayın.


1
İlk örneğinizde, noktalama işaretlerinde metnin ilk sırada sıralandığı sıra, yürürlükteki yerel ayar C (LC_ALL = C ile olduğu gibi) ancak diğer yerel ayarlarda değilse oluşabilir. Hangi yerel ayarın varsayılan olduğu OS ayarlarına bağlıdır. Bu nedenle, bir çok dağıtımda süssüz bir kişi sortfarklı olmalıdır.
Isaac
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.