Назад | Перейти на главную страницу

Как настроить sort (1) для использования настраиваемого сопоставления?

У меня есть текстовый файл, содержащий по одной записи в строке, который я хотел бы отсортировать в алфавитном порядке, за исключением того, что я хочу '-' сортировать после '[' и ']'. (В естественном порядке сортировки перед квадратными скобками стоит знак «-».) Есть ли способ изменить сопоставление, используемое sort (1) для достижения этой цели?

Вероятно, вы захотите применить один из предложенных обходных путей, но ответ на ваш вопрос трудный. Если вы хотите изменить, как sort сортирует, и ни один из специальных порядков сортировки, предлагаемых параметрами командной строки, вам не подходит, вам нужно будет определить свой собственный языковой стандарт. Видеть localedef.

Вы можете сделать это с помощью perl:

perl -e 'print sort { (($a =~ /^-/ && $b =~ /^[\[\]]/) || ($a =~ /^[\[\]]/ && $b =~ /^-/)) ? ($b cmp $a) : ($a cmp $b) } (<>)' <filename>

Один из способов - заменить символ, который не отображается в ваших данных, но сортируется после скобок (в некоторых регионах).

sed 's/-/|/g' inputfile | LC_ALL=C sort | sed 's/|/-/g' > outputfile

Очевидно, это не идеальное решение.