> echo "fdp.txtUNE/ser/redaeR/daerorca/bil/rsu\nf.dpu" | sort -s
fdp.txtUNE/ser/redaeR/daerorca/bil/rsu
f.dpu
С "." не является полем разделения символов по умолчанию, первые 3 символы появляются, чтобы сказать:«sort -s» считает, что «p» предшествует «d»?
< F = F (это нормально)
< г =. (В ASCII, "" < "d", но я в порядке с рода решающими буквами прийти до пунктуации)
< р = d (это проблематично)
Еще хуже, если удалить одну букву из второй строки, результаты перепутаны:
> echo "fdp.txtUNE/ser/redaeR/daerorca/bil/rsu\nf.dp" | sort -s
f.dp
fdp.txtUNE/ser/redaeR/daerorca/bil/rsu
Что безобразие происходит здесь и как я могу остановить это? Я думал, что «-s» хватит, но, видимо, нет.
Из того, что я могу сказать, «sort» думает «f.dpu»> «fdp.t», потому что «u»> «t». Однако это сравнение никогда не должно быть сделано, поскольку персонажи перед ним уже отличаются.
В качестве примечания, я получаю те же результаты без «-s».
EDIT: переменная окружения LC_ALL на «C» исправляет это, но мне все еще кажется, что оставляя пустую строку LC_ALL (locale), дает непоследовательные результаты (разные в порядке, несоответствующий - плохо).
Ну, я эхо прямо с терминала, поэтому думаю, что нет. – barrycarter
Дубликат [сортировка не сортируется, как ожидалось] (http://stackoverflow.com/questions/5909404/sort-not-sorting-as-expected-space-and-locale). Из часто задаваемых вопросов GNU: «[свернутый случай и пунктуация игнорируется] (http://www.gnu.org/software/coreutils/faq/)»; пробелы и пунктуация используются только как тай-брейки. «fdptxtU» предшествует «fdpu». –
@RaymondChen Ты прав. У меня была изменена переменная среды LANG на «en_US.iso88591», которая, очевидно, имеет тот же эффект, что и en_US.UTF-8, упомянутый в FAQ. Я думал, что «-s» остановит эффект «тай-брейка», но, по-видимому, нет. Пожалуйста, напишите свой ответ, и я его одобрю. У этой расстраивающей сортировки нет опции «--ignore-local» (хотя настройка переменной среды LC_ALL на C работает), и файлы, отсортированные на одной машине, не сортируются на другом. – barrycarter