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

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

3 ответа

Решение

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

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

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

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

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

perl -e 'print sort { (($a =~ /^-/ && $b =~ /^[\[\]]/) || ($a =~ /^[\[\]]/ && $b =~ /^-/)) ? ($b cmp $a) : ($a cmp $b) } (<>)' <filename>
Другие вопросы по тегам