
Я ищу решение для сортировки в postgres, но, похоже, это больше проблема сопоставления, поэтому я задаю вопрос о стандартной команде сортировки Unix.
У меня есть следующие данные:
A_A1
A\A2
A_A2
A\A1
после сортировки получаю:
cat test.txt |sort
A_A1
A\A1
A_A2
A\A2
но я хочу:
A_A1
A_A2
A\A1
A\A2
Я тоже пробовал, LANG=C cat...
но безрезультатно. Так какое правило сортировки позволит мне не игнорировать специальные символы?
решение1
От man sort
:
Set LC_ALL=C to get the traditional sort order that uses native byte values.
Так:
$ LC_ALL=C sort test.txt
A\A1
A\A2
A_A1
A_A2
поэтому локаль C выполняет сортировку по значению байта.
Тебе нужно сделать
$ cat test.txt | LC_ALL=C sort
если вы хотите передать его таким образом (но всегда старайтесь использовать версию имени файла напрямую, если она доступна).
Основная переменная окружения, влияющая на это, — LC_COLLATE
. LC_ALL
Однако если задано, то оно перекрывает все конкретные LC_
значения. Если не задано ни LC_ALL
, ни LC_COLLATE
, то возвращается к LANG
. Есличтоне задано, по умолчанию используется locale C
.