Чому "сортування" ігнорує особливих символів, наприклад зірочку?


27

Я думав, що sortразом будемо сортувати загальні префікси, але це не завжди буває. Візьмемо для прикладу цей вхід:

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

Після цього sortя б очікував, що все AT*закінчиться за один шматок, але коли ви запускаєте ці дані sort, вихідний ==вхід. Чому так? Я не вказую жодної опції ігнорувати не алфавітні символи чи що-небудь інше. Просто sort dict > out.

sortПоходить моя версія coreutils 8.5-1ubuntu3.


Працює для мене. Може, псевдонім десь?
Матьє Картьє

Відповіді:


17
sort --version-sort filename 

Це зберігає природний порядок чисел.


4
+1 Це працює, але чому? У тексті є лише кілька одноцифрових.
Аарон Дігулла

2
Працює, не змінюючи оточення, +1
Мередіт

@AaronDigulla: Я підозрюю, що він розглядає рядки у версії сортування як майже найдеревніший спосіб сортування речей, тому він ігнорує локаль і лише обробляє числа особливим чином.
JohnEye

23

Налаштування LC_ALL = C відновило традиційний порядок сортування в моєму випадку. Пакет: coreutils Версія: 8.5-1ubuntu3

export LC_ALL=C 

LANG=Cтакож працює. Що мене спантеличує: LANGвстановлено en_US.UTF-8; чому *досі лікують особливим ??
Аарон Дігулла

2
LC_COLLATE- це налаштування, специфічне для sortтощо.
Призупинено до подальшого повідомлення.

працює для мене в Raspbian // Pixel ... сортування "роздратування" ігнорування спеціальних символів мене вбивство ... спасибі.
ZEE

2
не потрібно exportабо навіть налаштовувати місцеві та, можливо, возитися з чимось іншим. Просто встановіть його у виклику роду: LC_ALL=C sort. Наприклад echo -e 'a\n*\n*b\nc' | LC_ALL=C sort, LC_ALL не буде змінено поза дзвінками для сортування
Hashbrown,

1

Він працює так, як очікувалося для мене (на cygwin).

sort input > output призводить до

AT * AD
AT * Оголошення
AT * Eydie
AT * Я б
AT * IUD
AT * Ito
AT * OD
AT * UT
AT * Uta
AT * Wyatt
AT * реклама
AT * очі
AT * ід
AT * овес
AT * переважують
AT * заборгованість
AT * здивовано
AT0S * вісімдесят
AT0S * Eye's
ATF * ATV
ATF * Едіва
ATF * adv
ATF * збудувати
Адвокат ATFKT *
ATFKT * переможений
ATFKTNK * адвокація
ATFKTS * прихильники
ATHT * Whitehead
ATHT * білолобка
ATJ * прислів'я
ATNXNS * уваги
ATNXNS * ослаблення
ATNXNS * самовпливання
ATP * adobe
ATP0K * ідіопатичний
ATT * далекоглядний
ATT * дотепно
ATT * лісистий
ATX * atishoo

Чи сортується до чогось? спробуйте\sort

Також

Локал, визначений середовищем, впливає на порядок сортування. Встановіть LC_ALL = C, щоб отримати традиційний порядок сортування, який використовує нативні значення байтів


Ніякого псевдоніма. Повинна бути якась особливість ubuntu / debian.
Аарон Дігулла

1

Версія: сортувати (GNU coreutils) 8.26

Я роблю це в рядку:

LANG=C sort FILE

Або за функцією (змінює вихідний файл):

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

1

Щоб надати просту відповідь на основі коментарів інших, це не змінює ваше оточення:

input_program | LC_COLLATE=C sort | output_program

або

LC_COLLATE=C sort < input_file > output_file

або їх комбінації


0

З сортуванням GNU ви можете використовувати --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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.