如何设置 sort(1) 来使用自定义排序规则?

如何设置 sort(1) 来使用自定义排序规则?

我有一个文本文件,每行包含一条记录,我想按字母顺序对其进行排序,但我希望“-”在“[”和“]”之后排序。(自然排序顺序在方括号前有“-”。)有没有办法修改 sort(1) 使用的排序规则来实现这一点?

答案1

一种方法是用一个未出现在您的数据中的字符进行替换,但在括号后进行排序(在某些语言环境中)。

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

这显然不是一个理想的解决方案。

答案2

您可能希望应用建议的解决方法之一,但您的问题的答案是否定的。如果您想更改排序方式sort,并且命令行选项提供的特殊排序顺序都不适合您,则需要定义自己的语言环境。请参阅localedef

答案3

你可以用 perl 来做:

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

相关内容