2011-08-23 8 views
6

[Jest to przepisać z podobnym pytaniem poprosiłem tyłu ... przepraszam za zamieszanie!]Dlaczego narzędzie sortujące UNIX ignoruje wiodące spacje bez opcji -b?

jestem zagubiony wiodącym S oraz standardowego sort użyteczność. Rozważmy zawartość myfile:

a 
b 
    a 

Wykonywanie sort -t : myfile przynosi nieoczekiwany wynik, przynajmniej dla mnie:

a 
    a 
b 

Czy to ma sens? <space> powinien pochodzić przed a-z (jak w przypadku ASCII) lub po. W pierwszym przypadku spodziewałbym

a 
b 
a 

podczas gdy w drugim przypadku

a 
b 
    a 

Dlaczego więc nie sort wydają się stosować opcję -b (ignorować wiodącą s) jeżeli, gdy nie została uwzględniona ? Aby być bezpiecznym, dodałem opcję -t, aby mieć dokładnie jedno pole w każdej linii. (According to the POSIX standard, "Pole zawiera maksymalną sekwencję nierozdzielających znaków i, w przypadku braku opcji -t, dowolny poprzedzający separator pól." sort myfile daje takie samo wyjście, co również jest nieoczekiwane.)

Z góry dziękuję !

Odpowiedz

9

To zależy od ustawień regionalnych. Z

LC_COLLATE=en_US.utf8 sort myfile 

mam swój nieoczekiwany rezultat iz

LC_COLLATE=C sort myfile 

mogę uzyskać oczekiwany rezultat. Zobacz także bash sort unusual order. Problem with spaces?

(nie wiem dlaczegosort -t obsługuje -b i tak).

+0

+1: Pokora :) –

+0

@Ernest: Dość tego! Usunąłem pokorę. –

+0

Dziękujemy! Co do tego, jak działa sortowanie w en_US.UTF-8, nie mogę tego zrozumieć ... [Tabela zbiorcza] (http://www.collation-charts.org/opensolaris/opensolaris.2008.05.en_US.UTF- 8.html) dla en_US.UTF-8 nie ma spacji między literami A i B ... –

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

Od strony man: * UWAGA * Ustawienia regionalne określone przez środowisko wpływa na porządek. Ustaw LC_ALL = C, aby uzyskać tradycyjną kolejność sortowania, która używa natywnych wartości bajtów.

Powiązane problemy